计划监控增加计划名

This commit is contained in:
2025-10-29 17:52:07 +08:00
parent 2910c9186a
commit af8689d627
9 changed files with 271 additions and 61 deletions

View File

@@ -998,7 +998,6 @@ const docTemplate = `{
}, },
{ {
"enum": [ "enum": [
7,
-1, -1,
0, 0,
1, 1,
@@ -1008,12 +1007,12 @@ const docTemplate = `{
5, 5,
-1, -1,
5, 5,
6 6,
7
], ],
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"x-enum-varnames": [ "x-enum-varnames": [
"_numLevels",
"DebugLevel", "DebugLevel",
"InfoLevel", "InfoLevel",
"WarnLevel", "WarnLevel",
@@ -1023,7 +1022,8 @@ const docTemplate = `{
"FatalLevel", "FatalLevel",
"_minLevel", "_minLevel",
"_maxLevel", "_maxLevel",
"InvalidLevel" "InvalidLevel",
"_numLevels"
], ],
"name": "level", "name": "level",
"in": "query" "in": "query"
@@ -3600,7 +3600,7 @@ const docTemplate = `{
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "获取所有计划的列表", "description": "获取所有计划的列表,支持按类型过滤和分页",
"produces": [ "produces": [
"application/json" "application/json"
], ],
@@ -3608,6 +3608,26 @@ const docTemplate = `{
"计划管理" "计划管理"
], ],
"summary": "获取计划列表", "summary": "获取计划列表",
"parameters": [
{
"type": "integer",
"description": "页码",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "每页大小",
"name": "pageSize",
"in": "query"
},
{
"type": "string",
"description": "计划类型 (all, custom, system),默认为 custom",
"name": "planType",
"in": "query"
}
],
"responses": { "responses": {
"200": { "200": {
"description": "业务码为200代表成功获取列表", "description": "业务码为200代表成功获取列表",
@@ -3620,10 +3640,7 @@ const docTemplate = `{
"type": "object", "type": "object",
"properties": { "properties": {
"data": { "data": {
"type": "array", "$ref": "#/definitions/dto.ListPlansResponse"
"items": {
"$ref": "#/definitions/dto.PlanResponse"
}
} }
} }
} }
@@ -3733,7 +3750,7 @@ const docTemplate = `{
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "根据计划ID更新计划的详细信息。", "description": "根据计划ID更新计划的详细信息。系统计划不允许修改。",
"consumes": [ "consumes": [
"application/json" "application/json"
], ],
@@ -3789,7 +3806,7 @@ const docTemplate = `{
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "根据计划ID删除计划。软删除", "description": "根据计划ID删除计划。软删除系统计划不允许删除。",
"produces": [ "produces": [
"application/json" "application/json"
], ],
@@ -3823,7 +3840,7 @@ const docTemplate = `{
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "根据计划ID启动一个计划的执行。", "description": "根据计划ID启动一个计划的执行。系统计划不允许手动启动。",
"produces": [ "produces": [
"application/json" "application/json"
], ],
@@ -3857,7 +3874,7 @@ const docTemplate = `{
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "根据计划ID停止一个正在执行的计划。", "description": "根据计划ID停止一个正在执行的计划。系统计划不能被停止。",
"produces": [ "produces": [
"application/json" "application/json"
], ],
@@ -4154,6 +4171,7 @@ const docTemplate = `{
2001, 2001,
4000, 4000,
4001, 4001,
4003,
4004, 4004,
4009, 4009,
5000, 5000,
@@ -4163,6 +4181,7 @@ const docTemplate = `{
"CodeBadRequest": "请求参数错误", "CodeBadRequest": "请求参数错误",
"CodeConflict": "资源冲突", "CodeConflict": "资源冲突",
"CodeCreated": "创建成功", "CodeCreated": "创建成功",
"CodeForbidden": "禁止访问",
"CodeInternalError": "服务器内部错误", "CodeInternalError": "服务器内部错误",
"CodeNotFound": "资源未找到", "CodeNotFound": "资源未找到",
"CodeServiceUnavailable": "服务不可用", "CodeServiceUnavailable": "服务不可用",
@@ -4174,6 +4193,7 @@ const docTemplate = `{
"创建成功", "创建成功",
"请求参数错误", "请求参数错误",
"未授权", "未授权",
"禁止访问",
"资源未找到", "资源未找到",
"资源冲突", "资源冲突",
"服务器内部错误", "服务器内部错误",
@@ -4184,6 +4204,7 @@ const docTemplate = `{
"CodeCreated", "CodeCreated",
"CodeBadRequest", "CodeBadRequest",
"CodeUnauthorized", "CodeUnauthorized",
"CodeForbidden",
"CodeNotFound", "CodeNotFound",
"CodeConflict", "CodeConflict",
"CodeInternalError", "CodeInternalError",
@@ -4744,6 +4765,21 @@ const docTemplate = `{
} }
} }
}, },
"dto.ListPlansResponse": {
"type": "object",
"properties": {
"plans": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.PlanResponse"
}
},
"total": {
"type": "integer",
"example": 100
}
}
},
"dto.ListRawMaterialPurchaseResponse": { "dto.ListRawMaterialPurchaseResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
@@ -5439,6 +5475,9 @@ const docTemplate = `{
"plan_id": { "plan_id": {
"type": "integer" "type": "integer"
}, },
"plan_name": {
"type": "string"
},
"started_at": { "started_at": {
"type": "string" "type": "string"
}, },
@@ -5493,6 +5532,14 @@ const docTemplate = `{
"type": "string", "type": "string",
"example": "猪舍温度控制计划" "example": "猪舍温度控制计划"
}, },
"plan_type": {
"allOf": [
{
"$ref": "#/definitions/models.PlanType"
}
],
"example": "自定义任务"
},
"status": { "status": {
"allOf": [ "allOf": [
{ {
@@ -6737,6 +6784,17 @@ const docTemplate = `{
"PlanStatusFailed" "PlanStatusFailed"
] ]
}, },
"models.PlanType": {
"type": "string",
"enum": [
"自定义任务",
"系统任务"
],
"x-enum-varnames": [
"PlanTypeCustom",
"PlanTypeSystem"
]
},
"models.SensorType": { "models.SensorType": {
"type": "string", "type": "string",
"enum": [ "enum": [
@@ -6792,22 +6850,26 @@ const docTemplate = `{
"enum": [ "enum": [
"计划分析", "计划分析",
"等待", "等待",
"下料" "下料",
"全量采集"
], ],
"x-enum-comments": { "x-enum-comments": {
"TaskPlanAnalysis": "解析Plan的Task列表并添加到待执行队列的特殊任务", "TaskPlanAnalysis": "解析Plan的Task列表并添加到待执行队列的特殊任务",
"TaskTypeFullCollection": "新增的全量采集任务",
"TaskTypeReleaseFeedWeight": "下料口释放指定重量任务", "TaskTypeReleaseFeedWeight": "下料口释放指定重量任务",
"TaskTypeWaiting": "等待任务" "TaskTypeWaiting": "等待任务"
}, },
"x-enum-descriptions": [ "x-enum-descriptions": [
"解析Plan的Task列表并添加到待执行队列的特殊任务", "解析Plan的Task列表并添加到待执行队列的特殊任务",
"等待任务", "等待任务",
"下料口释放指定重量任务" "下料口释放指定重量任务",
"新增的全量采集任务"
], ],
"x-enum-varnames": [ "x-enum-varnames": [
"TaskPlanAnalysis", "TaskPlanAnalysis",
"TaskTypeWaiting", "TaskTypeWaiting",
"TaskTypeReleaseFeedWeight" "TaskTypeReleaseFeedWeight",
"TaskTypeFullCollection"
] ]
}, },
"models.ValueDescriptor": { "models.ValueDescriptor": {
@@ -6845,7 +6907,6 @@ const docTemplate = `{
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"enum": [ "enum": [
7,
-1, -1,
0, 0,
1, 1,
@@ -6855,10 +6916,10 @@ const docTemplate = `{
5, 5,
-1, -1,
5, 5,
6 6,
7
], ],
"x-enum-varnames": [ "x-enum-varnames": [
"_numLevels",
"DebugLevel", "DebugLevel",
"InfoLevel", "InfoLevel",
"WarnLevel", "WarnLevel",
@@ -6868,7 +6929,8 @@ const docTemplate = `{
"FatalLevel", "FatalLevel",
"_minLevel", "_minLevel",
"_maxLevel", "_maxLevel",
"InvalidLevel" "InvalidLevel",
"_numLevels"
] ]
} }
}, },

View File

@@ -990,7 +990,6 @@
}, },
{ {
"enum": [ "enum": [
7,
-1, -1,
0, 0,
1, 1,
@@ -1000,12 +999,12 @@
5, 5,
-1, -1,
5, 5,
6 6,
7
], ],
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"x-enum-varnames": [ "x-enum-varnames": [
"_numLevels",
"DebugLevel", "DebugLevel",
"InfoLevel", "InfoLevel",
"WarnLevel", "WarnLevel",
@@ -1015,7 +1014,8 @@
"FatalLevel", "FatalLevel",
"_minLevel", "_minLevel",
"_maxLevel", "_maxLevel",
"InvalidLevel" "InvalidLevel",
"_numLevels"
], ],
"name": "level", "name": "level",
"in": "query" "in": "query"
@@ -3592,7 +3592,7 @@
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "获取所有计划的列表", "description": "获取所有计划的列表,支持按类型过滤和分页",
"produces": [ "produces": [
"application/json" "application/json"
], ],
@@ -3600,6 +3600,26 @@
"计划管理" "计划管理"
], ],
"summary": "获取计划列表", "summary": "获取计划列表",
"parameters": [
{
"type": "integer",
"description": "页码",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "每页大小",
"name": "pageSize",
"in": "query"
},
{
"type": "string",
"description": "计划类型 (all, custom, system),默认为 custom",
"name": "planType",
"in": "query"
}
],
"responses": { "responses": {
"200": { "200": {
"description": "业务码为200代表成功获取列表", "description": "业务码为200代表成功获取列表",
@@ -3612,10 +3632,7 @@
"type": "object", "type": "object",
"properties": { "properties": {
"data": { "data": {
"type": "array", "$ref": "#/definitions/dto.ListPlansResponse"
"items": {
"$ref": "#/definitions/dto.PlanResponse"
}
} }
} }
} }
@@ -3725,7 +3742,7 @@
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "根据计划ID更新计划的详细信息。", "description": "根据计划ID更新计划的详细信息。系统计划不允许修改。",
"consumes": [ "consumes": [
"application/json" "application/json"
], ],
@@ -3781,7 +3798,7 @@
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "根据计划ID删除计划。软删除", "description": "根据计划ID删除计划。软删除系统计划不允许删除。",
"produces": [ "produces": [
"application/json" "application/json"
], ],
@@ -3815,7 +3832,7 @@
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "根据计划ID启动一个计划的执行。", "description": "根据计划ID启动一个计划的执行。系统计划不允许手动启动。",
"produces": [ "produces": [
"application/json" "application/json"
], ],
@@ -3849,7 +3866,7 @@
"BearerAuth": [] "BearerAuth": []
} }
], ],
"description": "根据计划ID停止一个正在执行的计划。", "description": "根据计划ID停止一个正在执行的计划。系统计划不能被停止。",
"produces": [ "produces": [
"application/json" "application/json"
], ],
@@ -4146,6 +4163,7 @@
2001, 2001,
4000, 4000,
4001, 4001,
4003,
4004, 4004,
4009, 4009,
5000, 5000,
@@ -4155,6 +4173,7 @@
"CodeBadRequest": "请求参数错误", "CodeBadRequest": "请求参数错误",
"CodeConflict": "资源冲突", "CodeConflict": "资源冲突",
"CodeCreated": "创建成功", "CodeCreated": "创建成功",
"CodeForbidden": "禁止访问",
"CodeInternalError": "服务器内部错误", "CodeInternalError": "服务器内部错误",
"CodeNotFound": "资源未找到", "CodeNotFound": "资源未找到",
"CodeServiceUnavailable": "服务不可用", "CodeServiceUnavailable": "服务不可用",
@@ -4166,6 +4185,7 @@
"创建成功", "创建成功",
"请求参数错误", "请求参数错误",
"未授权", "未授权",
"禁止访问",
"资源未找到", "资源未找到",
"资源冲突", "资源冲突",
"服务器内部错误", "服务器内部错误",
@@ -4176,6 +4196,7 @@
"CodeCreated", "CodeCreated",
"CodeBadRequest", "CodeBadRequest",
"CodeUnauthorized", "CodeUnauthorized",
"CodeForbidden",
"CodeNotFound", "CodeNotFound",
"CodeConflict", "CodeConflict",
"CodeInternalError", "CodeInternalError",
@@ -4736,6 +4757,21 @@
} }
} }
}, },
"dto.ListPlansResponse": {
"type": "object",
"properties": {
"plans": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.PlanResponse"
}
},
"total": {
"type": "integer",
"example": 100
}
}
},
"dto.ListRawMaterialPurchaseResponse": { "dto.ListRawMaterialPurchaseResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
@@ -5431,6 +5467,9 @@
"plan_id": { "plan_id": {
"type": "integer" "type": "integer"
}, },
"plan_name": {
"type": "string"
},
"started_at": { "started_at": {
"type": "string" "type": "string"
}, },
@@ -5485,6 +5524,14 @@
"type": "string", "type": "string",
"example": "猪舍温度控制计划" "example": "猪舍温度控制计划"
}, },
"plan_type": {
"allOf": [
{
"$ref": "#/definitions/models.PlanType"
}
],
"example": "自定义任务"
},
"status": { "status": {
"allOf": [ "allOf": [
{ {
@@ -6729,6 +6776,17 @@
"PlanStatusFailed" "PlanStatusFailed"
] ]
}, },
"models.PlanType": {
"type": "string",
"enum": [
"自定义任务",
"系统任务"
],
"x-enum-varnames": [
"PlanTypeCustom",
"PlanTypeSystem"
]
},
"models.SensorType": { "models.SensorType": {
"type": "string", "type": "string",
"enum": [ "enum": [
@@ -6784,22 +6842,26 @@
"enum": [ "enum": [
"计划分析", "计划分析",
"等待", "等待",
"下料" "下料",
"全量采集"
], ],
"x-enum-comments": { "x-enum-comments": {
"TaskPlanAnalysis": "解析Plan的Task列表并添加到待执行队列的特殊任务", "TaskPlanAnalysis": "解析Plan的Task列表并添加到待执行队列的特殊任务",
"TaskTypeFullCollection": "新增的全量采集任务",
"TaskTypeReleaseFeedWeight": "下料口释放指定重量任务", "TaskTypeReleaseFeedWeight": "下料口释放指定重量任务",
"TaskTypeWaiting": "等待任务" "TaskTypeWaiting": "等待任务"
}, },
"x-enum-descriptions": [ "x-enum-descriptions": [
"解析Plan的Task列表并添加到待执行队列的特殊任务", "解析Plan的Task列表并添加到待执行队列的特殊任务",
"等待任务", "等待任务",
"下料口释放指定重量任务" "下料口释放指定重量任务",
"新增的全量采集任务"
], ],
"x-enum-varnames": [ "x-enum-varnames": [
"TaskPlanAnalysis", "TaskPlanAnalysis",
"TaskTypeWaiting", "TaskTypeWaiting",
"TaskTypeReleaseFeedWeight" "TaskTypeReleaseFeedWeight",
"TaskTypeFullCollection"
] ]
}, },
"models.ValueDescriptor": { "models.ValueDescriptor": {
@@ -6837,7 +6899,6 @@
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"enum": [ "enum": [
7,
-1, -1,
0, 0,
1, 1,
@@ -6847,10 +6908,10 @@
5, 5,
-1, -1,
5, 5,
6 6,
7
], ],
"x-enum-varnames": [ "x-enum-varnames": [
"_numLevels",
"DebugLevel", "DebugLevel",
"InfoLevel", "InfoLevel",
"WarnLevel", "WarnLevel",
@@ -6860,7 +6921,8 @@
"FatalLevel", "FatalLevel",
"_minLevel", "_minLevel",
"_maxLevel", "_maxLevel",
"InvalidLevel" "InvalidLevel",
"_numLevels"
] ]
} }
}, },

View File

@@ -17,6 +17,7 @@ definitions:
- 2001 - 2001
- 4000 - 4000
- 4001 - 4001
- 4003
- 4004 - 4004
- 4009 - 4009
- 5000 - 5000
@@ -26,6 +27,7 @@ definitions:
CodeBadRequest: 请求参数错误 CodeBadRequest: 请求参数错误
CodeConflict: 资源冲突 CodeConflict: 资源冲突
CodeCreated: 创建成功 CodeCreated: 创建成功
CodeForbidden: 禁止访问
CodeInternalError: 服务器内部错误 CodeInternalError: 服务器内部错误
CodeNotFound: 资源未找到 CodeNotFound: 资源未找到
CodeServiceUnavailable: 服务不可用 CodeServiceUnavailable: 服务不可用
@@ -36,6 +38,7 @@ definitions:
- 创建成功 - 创建成功
- 请求参数错误 - 请求参数错误
- 未授权 - 未授权
- 禁止访问
- 资源未找到 - 资源未找到
- 资源冲突 - 资源冲突
- 服务器内部错误 - 服务器内部错误
@@ -45,6 +48,7 @@ definitions:
- CodeCreated - CodeCreated
- CodeBadRequest - CodeBadRequest
- CodeUnauthorized - CodeUnauthorized
- CodeForbidden
- CodeNotFound - CodeNotFound
- CodeConflict - CodeConflict
- CodeInternalError - CodeInternalError
@@ -421,6 +425,16 @@ definitions:
pagination: pagination:
$ref: '#/definitions/dto.PaginationDTO' $ref: '#/definitions/dto.PaginationDTO'
type: object type: object
dto.ListPlansResponse:
properties:
plans:
items:
$ref: '#/definitions/dto.PlanResponse'
type: array
total:
example: 100
type: integer
type: object
dto.ListRawMaterialPurchaseResponse: dto.ListRawMaterialPurchaseResponse:
properties: properties:
list: list:
@@ -879,6 +893,8 @@ definitions:
type: integer type: integer
plan_id: plan_id:
type: integer type: integer
plan_name:
type: string
started_at: started_at:
type: string type: string
status: status:
@@ -914,6 +930,10 @@ definitions:
name: name:
example: 猪舍温度控制计划 example: 猪舍温度控制计划
type: string type: string
plan_type:
allOf:
- $ref: '#/definitions/models.PlanType'
example: 自定义任务
status: status:
allOf: allOf:
- $ref: '#/definitions/models.PlanStatus' - $ref: '#/definitions/models.PlanStatus'
@@ -1808,6 +1828,14 @@ definitions:
- PlanStatusEnabled - PlanStatusEnabled
- PlanStatusStopped - PlanStatusStopped
- PlanStatusFailed - PlanStatusFailed
models.PlanType:
enum:
- 自定义任务
- 系统任务
type: string
x-enum-varnames:
- PlanTypeCustom
- PlanTypeSystem
models.SensorType: models.SensorType:
enum: enum:
- 信号强度 - 信号强度
@@ -1855,19 +1883,23 @@ definitions:
- 计划分析 - 计划分析
- 等待 - 等待
- 下料 - 下料
- 全量采集
type: string type: string
x-enum-comments: x-enum-comments:
TaskPlanAnalysis: 解析Plan的Task列表并添加到待执行队列的特殊任务 TaskPlanAnalysis: 解析Plan的Task列表并添加到待执行队列的特殊任务
TaskTypeFullCollection: 新增的全量采集任务
TaskTypeReleaseFeedWeight: 下料口释放指定重量任务 TaskTypeReleaseFeedWeight: 下料口释放指定重量任务
TaskTypeWaiting: 等待任务 TaskTypeWaiting: 等待任务
x-enum-descriptions: x-enum-descriptions:
- 解析Plan的Task列表并添加到待执行队列的特殊任务 - 解析Plan的Task列表并添加到待执行队列的特殊任务
- 等待任务 - 等待任务
- 下料口释放指定重量任务 - 下料口释放指定重量任务
- 新增的全量采集任务
x-enum-varnames: x-enum-varnames:
- TaskPlanAnalysis - TaskPlanAnalysis
- TaskTypeWaiting - TaskTypeWaiting
- TaskTypeReleaseFeedWeight - TaskTypeReleaseFeedWeight
- TaskTypeFullCollection
models.ValueDescriptor: models.ValueDescriptor:
properties: properties:
multiplier: multiplier:
@@ -1893,7 +1925,6 @@ definitions:
- NotifierTypeLog - NotifierTypeLog
zapcore.Level: zapcore.Level:
enum: enum:
- 7
- -1 - -1
- 0 - 0
- 1 - 1
@@ -1904,10 +1935,10 @@ definitions:
- -1 - -1
- 5 - 5
- 6 - 6
- 7
format: int32 format: int32
type: integer type: integer
x-enum-varnames: x-enum-varnames:
- _numLevels
- DebugLevel - DebugLevel
- InfoLevel - InfoLevel
- WarnLevel - WarnLevel
@@ -1918,6 +1949,7 @@ definitions:
- _minLevel - _minLevel
- _maxLevel - _maxLevel
- InvalidLevel - InvalidLevel
- _numLevels
info: info:
contact: contact:
email: divano@example.com email: divano@example.com
@@ -2489,7 +2521,6 @@ paths:
name: end_time name: end_time
type: string type: string
- enum: - enum:
- 7
- -1 - -1
- 0 - 0
- 1 - 1
@@ -2500,12 +2531,12 @@ paths:
- -1 - -1
- 5 - 5
- 6 - 6
- 7
format: int32 format: int32
in: query in: query
name: level name: level
type: integer type: integer
x-enum-varnames: x-enum-varnames:
- _numLevels
- DebugLevel - DebugLevel
- InfoLevel - InfoLevel
- WarnLevel - WarnLevel
@@ -2516,6 +2547,7 @@ paths:
- _minLevel - _minLevel
- _maxLevel - _maxLevel
- InvalidLevel - InvalidLevel
- _numLevels
- enum: - enum:
- 邮件 - 邮件
- 企业微信 - 企业微信
@@ -4038,7 +4070,20 @@ paths:
- 猪场管理 - 猪场管理
/api/v1/plans: /api/v1/plans:
get: get:
description: 获取所有计划的列表 description: 获取所有计划的列表,支持按类型过滤和分页
parameters:
- description: 页码
in: query
name: page
type: integer
- description: 每页大小
in: query
name: pageSize
type: integer
- description: 计划类型 (all, custom, system),默认为 custom
in: query
name: planType
type: string
produces: produces:
- application/json - application/json
responses: responses:
@@ -4049,9 +4094,7 @@ paths:
- $ref: '#/definitions/controller.Response' - $ref: '#/definitions/controller.Response'
- properties: - properties:
data: data:
items: $ref: '#/definitions/dto.ListPlansResponse'
$ref: '#/definitions/dto.PlanResponse'
type: array
type: object type: object
security: security:
- BearerAuth: [] - BearerAuth: []
@@ -4088,7 +4131,7 @@ paths:
- 计划管理 - 计划管理
/api/v1/plans/{id}: /api/v1/plans/{id}:
delete: delete:
description: 根据计划ID删除计划。软删除 description: 根据计划ID删除计划。软删除系统计划不允许删除。
parameters: parameters:
- description: 计划ID - description: 计划ID
in: path in: path
@@ -4135,7 +4178,7 @@ paths:
put: put:
consumes: consumes:
- application/json - application/json
description: 根据计划ID更新计划的详细信息。 description: 根据计划ID更新计划的详细信息。系统计划不允许修改。
parameters: parameters:
- description: 计划ID - description: 计划ID
in: path in: path
@@ -4167,7 +4210,7 @@ paths:
- 计划管理 - 计划管理
/api/v1/plans/{id}/start: /api/v1/plans/{id}/start:
post: post:
description: 根据计划ID启动一个计划的执行。 description: 根据计划ID启动一个计划的执行。系统计划不允许手动启动。
parameters: parameters:
- description: 计划ID - description: 计划ID
in: path in: path
@@ -4188,7 +4231,7 @@ paths:
- 计划管理 - 计划管理
/api/v1/plans/{id}/stop: /api/v1/plans/{id}/stop:
post: post:
description: 根据计划ID停止一个正在执行的计划。 description: 根据计划ID停止一个正在执行的计划。系统计划不能被停止。
parameters: parameters:
- description: 计划ID - description: 计划ID
in: path in: path

View File

@@ -149,7 +149,7 @@ func (c *Controller) ListPlanExecutionLogs(ctx *gin.Context) {
opts.Status = &status opts.Status = &status
} }
data, total, err := c.monitorService.ListPlanExecutionLogs(opts, req.Page, req.PageSize) planLogs, plans, total, err := c.monitorService.ListPlanExecutionLogs(opts, req.Page, req.PageSize)
if err != nil { if err != nil {
if errors.Is(err, repository.ErrInvalidPagination) { if errors.Is(err, repository.ErrInvalidPagination) {
c.logger.Warnf("%s: 无效的分页参数: %v", actionType, err) c.logger.Warnf("%s: 无效的分页参数: %v", actionType, err)
@@ -162,8 +162,8 @@ func (c *Controller) ListPlanExecutionLogs(ctx *gin.Context) {
return return
} }
resp := dto.NewListPlanExecutionLogResponse(data, total, req.Page, req.PageSize) resp := dto.NewListPlanExecutionLogResponse(planLogs, plans, total, req.Page, req.PageSize)
c.logger.Infof("%s: 成功, 获取到 %d 条记录, 总计 %d 条", actionType, len(data), total) c.logger.Infof("%s: 成功, 获取到 %d 条记录, 总计 %d 条", actionType, len(planLogs), total)
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "获取计划执行日志成功", resp, actionType, "获取计划执行日志成功", req) controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "获取计划执行日志成功", resp, actionType, "获取计划执行日志成功", req)
} }

View File

@@ -53,14 +53,20 @@ func NewListDeviceCommandLogResponse(data []models.DeviceCommandLog, total int64
} }
// NewListPlanExecutionLogResponse 从模型数据创建列表响应 DTO // NewListPlanExecutionLogResponse 从模型数据创建列表响应 DTO
func NewListPlanExecutionLogResponse(data []models.PlanExecutionLog, total int64, page, pageSize int) *ListPlanExecutionLogResponse { func NewListPlanExecutionLogResponse(planLogs []models.PlanExecutionLog, plans []models.Plan, total int64, page, pageSize int) *ListPlanExecutionLogResponse {
dtos := make([]PlanExecutionLogDTO, len(data)) planId2Name := make(map[uint]string)
for i, item := range data { for _, plan := range plans {
planId2Name[plan.ID] = plan.Name
}
dtos := make([]PlanExecutionLogDTO, len(planLogs))
for i, item := range planLogs {
dtos[i] = PlanExecutionLogDTO{ dtos[i] = PlanExecutionLogDTO{
ID: item.ID, ID: item.ID,
CreatedAt: item.CreatedAt, CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt, UpdatedAt: item.UpdatedAt,
PlanID: item.PlanID, PlanID: item.PlanID,
PlanName: planId2Name[item.PlanID],
Status: item.Status, Status: item.Status,
StartedAt: item.StartedAt, StartedAt: item.StartedAt,
EndedAt: item.EndedAt, EndedAt: item.EndedAt,

View File

@@ -91,6 +91,7 @@ type PlanExecutionLogDTO struct {
CreatedAt time.Time `json:"created_at"` CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"` UpdatedAt time.Time `json:"updated_at"`
PlanID uint `json:"plan_id"` PlanID uint `json:"plan_id"`
PlanName string `json:"plan_name"`
Status models.ExecutionStatus `json:"status"` Status models.ExecutionStatus `json:"status"`
StartedAt time.Time `json:"started_at"` StartedAt time.Time `json:"started_at"`
EndedAt time.Time `json:"ended_at"` EndedAt time.Time `json:"ended_at"`

View File

@@ -9,7 +9,7 @@ import (
type MonitorService interface { type MonitorService interface {
ListSensorData(opts repository.SensorDataListOptions, page, pageSize int) ([]models.SensorData, int64, error) ListSensorData(opts repository.SensorDataListOptions, page, pageSize int) ([]models.SensorData, int64, error)
ListDeviceCommandLogs(opts repository.DeviceCommandLogListOptions, page, pageSize int) ([]models.DeviceCommandLog, int64, error) ListDeviceCommandLogs(opts repository.DeviceCommandLogListOptions, page, pageSize int) ([]models.DeviceCommandLog, int64, error)
ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, int64, error) ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, []models.Plan, int64, error)
ListTaskExecutionLogs(opts repository.TaskExecutionLogListOptions, page, pageSize int) ([]models.TaskExecutionLog, int64, error) ListTaskExecutionLogs(opts repository.TaskExecutionLogListOptions, page, pageSize int) ([]models.TaskExecutionLog, int64, error)
ListPendingCollections(opts repository.PendingCollectionListOptions, page, pageSize int) ([]models.PendingCollection, int64, error) ListPendingCollections(opts repository.PendingCollectionListOptions, page, pageSize int) ([]models.PendingCollection, int64, error)
ListUserActionLogs(opts repository.UserActionLogListOptions, page, pageSize int) ([]models.UserActionLog, int64, error) ListUserActionLogs(opts repository.UserActionLogListOptions, page, pageSize int) ([]models.UserActionLog, int64, error)
@@ -32,6 +32,7 @@ type monitorService struct {
sensorDataRepo repository.SensorDataRepository sensorDataRepo repository.SensorDataRepository
deviceCommandLogRepo repository.DeviceCommandLogRepository deviceCommandLogRepo repository.DeviceCommandLogRepository
executionLogRepo repository.ExecutionLogRepository executionLogRepo repository.ExecutionLogRepository
planRepository repository.PlanRepository
pendingCollectionRepo repository.PendingCollectionRepository pendingCollectionRepo repository.PendingCollectionRepository
userActionLogRepo repository.UserActionLogRepository userActionLogRepo repository.UserActionLogRepository
rawMaterialRepo repository.RawMaterialRepository rawMaterialRepo repository.RawMaterialRepository
@@ -49,6 +50,7 @@ func NewMonitorService(
sensorDataRepo repository.SensorDataRepository, sensorDataRepo repository.SensorDataRepository,
deviceCommandLogRepo repository.DeviceCommandLogRepository, deviceCommandLogRepo repository.DeviceCommandLogRepository,
executionLogRepo repository.ExecutionLogRepository, executionLogRepo repository.ExecutionLogRepository,
planRepository repository.PlanRepository,
pendingCollectionRepo repository.PendingCollectionRepository, pendingCollectionRepo repository.PendingCollectionRepository,
userActionLogRepo repository.UserActionLogRepository, userActionLogRepo repository.UserActionLogRepository,
rawMaterialRepo repository.RawMaterialRepository, rawMaterialRepo repository.RawMaterialRepository,
@@ -64,6 +66,7 @@ func NewMonitorService(
sensorDataRepo: sensorDataRepo, sensorDataRepo: sensorDataRepo,
deviceCommandLogRepo: deviceCommandLogRepo, deviceCommandLogRepo: deviceCommandLogRepo,
executionLogRepo: executionLogRepo, executionLogRepo: executionLogRepo,
planRepository: planRepository,
pendingCollectionRepo: pendingCollectionRepo, pendingCollectionRepo: pendingCollectionRepo,
userActionLogRepo: userActionLogRepo, userActionLogRepo: userActionLogRepo,
rawMaterialRepo: rawMaterialRepo, rawMaterialRepo: rawMaterialRepo,
@@ -88,8 +91,25 @@ func (s *monitorService) ListDeviceCommandLogs(opts repository.DeviceCommandLogL
} }
// ListPlanExecutionLogs 负责处理查询计划执行日志列表的业务逻辑 // ListPlanExecutionLogs 负责处理查询计划执行日志列表的业务逻辑
func (s *monitorService) ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, int64, error) { func (s *monitorService) ListPlanExecutionLogs(opts repository.PlanExecutionLogListOptions, page, pageSize int) ([]models.PlanExecutionLog, []models.Plan, int64, error) {
return s.executionLogRepo.ListPlanExecutionLogs(opts, page, pageSize) planLogs, total, err := s.executionLogRepo.ListPlanExecutionLogs(opts, page, pageSize)
if err != nil {
return nil, nil, 0, err
}
planIds := []uint{}
for _, datum := range planLogs {
for _, id := range planIds {
if id == datum.PlanID {
break
}
planIds = append(planIds, datum.PlanID)
}
}
plans, err := s.planRepository.GetPlansByIDs(planIds)
if err != nil {
return nil, nil, 0, err
}
return planLogs, plans, total, nil
} }
// ListTaskExecutionLogs 负责处理查询任务执行日志列表的业务逻辑 // ListTaskExecutionLogs 负责处理查询任务执行日志列表的业务逻辑

View File

@@ -196,6 +196,7 @@ func initAppServices(infra *Infrastructure, domainServices *DomainServices, logg
infra.Repos.SensorDataRepo, infra.Repos.SensorDataRepo,
infra.Repos.DeviceCommandLogRepo, infra.Repos.DeviceCommandLogRepo,
infra.Repos.ExecutionLogRepo, infra.Repos.ExecutionLogRepo,
infra.Repos.PlanRepo,
infra.Repos.PendingCollectionRepo, infra.Repos.PendingCollectionRepo,
infra.Repos.UserActionLogRepo, infra.Repos.UserActionLogRepo,
infra.Repos.RawMaterialRepo, infra.Repos.RawMaterialRepo,

View File

@@ -44,6 +44,8 @@ type PlanRepository interface {
GetBasicPlanByID(id uint) (*models.Plan, error) GetBasicPlanByID(id uint) (*models.Plan, error)
// GetPlanByID 根据ID获取计划包含子计划和任务详情 // GetPlanByID 根据ID获取计划包含子计划和任务详情
GetPlanByID(id uint) (*models.Plan, error) GetPlanByID(id uint) (*models.Plan, error)
// GetPlansByIDs 根据ID列表获取计划不包含子计划和任务详情
GetPlansByIDs(ids []uint) ([]models.Plan, error)
// CreatePlan 创建一个新的计划 // CreatePlan 创建一个新的计划
CreatePlan(plan *models.Plan) error CreatePlan(plan *models.Plan) error
// UpdatePlan 更新计划,包括子计划和任务 // UpdatePlan 更新计划,包括子计划和任务
@@ -139,6 +141,19 @@ func (r *gormPlanRepository) GetBasicPlanByID(id uint) (*models.Plan, error) {
return &plan, nil return &plan, nil
} }
// GetPlansByIDs 根据ID列表获取计划不包含子计划和任务详情
func (r *gormPlanRepository) GetPlansByIDs(ids []uint) ([]models.Plan, error) {
var plans []models.Plan
if len(ids) == 0 {
return plans, nil
}
err := r.db.Where("id IN ?", ids).Find(&plans).Error
if err != nil {
return nil, err
}
return plans, nil
}
// GetPlanByID 根据ID获取计划包含子计划和任务详情 // GetPlanByID 根据ID获取计划包含子计划和任务详情
func (r *gormPlanRepository) GetPlanByID(id uint) (*models.Plan, error) { func (r *gormPlanRepository) GetPlanByID(id uint) (*models.Plan, error) {
var plan models.Plan var plan models.Plan