From fbbab2dfe9584a23efad2e7e5160ff9fdd7199cc Mon Sep 17 00:00:00 2001 From: luoyifan Date: Tue, 1 Jul 2025 22:47:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E6=8E=89=20Model=20=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E6=8D=A2=E6=88=90=20R.=20=E5=89=8D=E7=AB=AF=20success=3D=3Dfal?= =?UTF-8?q?se=20=E6=97=B6=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8=E5=8E=9F?= =?UTF-8?q?=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.ts | 17 ++++++++++++++-- src/core/manager/EnvManager.ts | 15 +++++++------- src/core/script/RCSScript.ts | 44 +++++++++++++++++++++++++++++------------- src/types/RCS.d.ts | 11 +++++++++++ 4 files changed, 64 insertions(+), 23 deletions(-) diff --git a/src/config.ts b/src/config.ts index 6d3d16b..1a74ce1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -24,7 +24,20 @@ function globalConfig() { // 全局拦截配置 axiosInstance.interceptors.response.clear(); axiosInstance.interceptors.response.use( - response => response, + (response) => { + const data = response.data; + + if (data && data.success === false) { + // 显示错误对话框 + system.showErrorDialog(data.failMessage || '系统异常'); + + // 返回一个被拒绝的 Promise,这样后续 .then() 不会执行,进入 .catch() + return Promise.reject(response); + } + + // 正常情况,继续传递数据 + return response; + }, (error: any) => { const { response } = error; const err: AxiosInterceptorError = { @@ -72,4 +85,4 @@ function globalConfig() { export { globalConfig, -} \ No newline at end of file +} diff --git a/src/core/manager/EnvManager.ts b/src/core/manager/EnvManager.ts index fdd3301..44d4c6f 100644 --- a/src/core/manager/EnvManager.ts +++ b/src/core/manager/EnvManager.ts @@ -4,8 +4,8 @@ import mqtt, { type IConnackPacket, type IPublishPacket } from 'mqtt' import type { ErrorWithReasonCode } from 'mqtt/src/lib/shared.ts' import type Cl23dObject from '@/modules/cl2/Cl23dObject.ts' import { Request } from '@ease-forge/shared' -import AmrMessageManager from "@/core/manager/amr/AmrMessageManager"; -import {AmrMsg} from "@/core/manager/amr/AmrMessageDefine"; +import AmrMessageManager from '@/core/manager/amr/AmrMessageManager' +import { AmrMsg } from '@/core/manager/amr/AmrMessageDefine' export default class EnvManager { private viewport: Viewport @@ -99,7 +99,7 @@ export default class EnvManager { onMqttMessage = (topic: string, payload: Buffer, packet: IPublishPacket) => { console.log(`[${topic}]-> ${payload.toString()}`) - if (topic.startsWith("/wcs_server/")) { + if (topic.startsWith('/wcs_server/')) { const message: AmrMsg = JSON.parse(payload.toString()) this.amrMessageManager.handleMessage(topic, message) } else { @@ -143,12 +143,13 @@ export default class EnvManager { return } - this.stop() + await this.stop() system.showLoading() worldModel.state.runState.isLoading = true worldModel.state.runState.currentEnv = Object.freeze(env) try { + await RCS.projectStart() await this.loadExecutors() await this.loadInv() @@ -177,10 +178,8 @@ export default class EnvManager { async stop() { system.showLoading() try { - if (worldModel.state.runState.isRunning) { - worldModel.state.runState.isRunning = false - } - worldModel.state.runState.currentEnv = null + await RCS.projectStop() + worldModel.state.runState.isRunning = false if (this.client) { this.client.removeAllListeners() this.client.end() diff --git a/src/core/script/RCSScript.ts b/src/core/script/RCSScript.ts index 5bb085c..7d5bb2a 100644 --- a/src/core/script/RCSScript.ts +++ b/src/core/script/RCSScript.ts @@ -9,15 +9,33 @@ export default class RCSScript implements RCS { this.viewport = viewport } + projectStart(): Promise> { + if (!worldModel.state.project_uuid || !worldModel.state.runState.currentEnvId) { + return Promise.reject(new Error('Project UUID or Environment ID is not set.')) + } + + return Request.request.post('/api/workbench/RcsController@projectStart', { + projectUUID: worldModel.state.project_uuid, + envId: worldModel.state.runState.currentEnvId + }) + } + + projectStop(): Promise> { + if (!worldModel.state.project_uuid || !worldModel.state.runState.currentEnvId) { + return Promise.reject(new Error('Project UUID or Environment ID is not set.')) + } + + return Request.request.post('/api/workbench/RcsController@projectStop', { + projectUUID: worldModel.state.project_uuid, + envId: worldModel.state.runState.currentEnvId + }) + } + + agvMove(agvId: string, targetWayPointId: string, targetDirection: '' | LLCDirection = '', option: AgvOptions = {}): Promise> { return Request.request.post('/api/workbench/RcsController@agvMove', { projectUUID: worldModel.state.project_uuid, - catalogCode: worldModel.state.catalogCode, - envId: 1, - agvId, - targetWayPointId, - targetDirection, - option + envId: worldModel.state.runState.currentEnvId }) } @@ -25,7 +43,7 @@ export default class RCSScript implements RCS { return Request.request.post('/api/workbench/RcsController@waitTaskFinish', { projectUUID: worldModel.state.project_uuid, catalogCode: worldModel.state.catalogCode, - envId: 1, + envId: worldModel.state.runState.currentEnvId, agvId, option }) @@ -35,7 +53,7 @@ export default class RCSScript implements RCS { return Request.request.post('/api/workbench/RcsController@agvCarry', { projectUUID: worldModel.state.project_uuid, catalogCode: worldModel.state.catalogCode, - envId: 1, + envId: worldModel.state.runState.currentEnvId, agvId, fromStoreLoc, targetStoreLoc, @@ -47,7 +65,7 @@ export default class RCSScript implements RCS { return Request.request.post('/api/workbench/RcsController@agvLoad', { projectUUID: worldModel.state.project_uuid, catalogCode: worldModel.state.catalogCode, - envId: 1, + envId: worldModel.state.runState.currentEnvId, agvId, targetStoreLoc, option @@ -58,7 +76,7 @@ export default class RCSScript implements RCS { return Request.request.post('/api/workbench/RcsController@agvUnload', { projectUUID: worldModel.state.project_uuid, catalogCode: worldModel.state.catalogCode, - envId: 1, + envId: worldModel.state.runState.currentEnvId, agvId, targetStoreLoc, option @@ -69,7 +87,7 @@ export default class RCSScript implements RCS { return Request.request.post('/api/workbench/RcsController@agvInfo', { projectUUID: worldModel.state.project_uuid, catalogCode: worldModel.state.catalogCode, - envId: 1, + envId: worldModel.state.runState.currentEnvId, agvId: agvId, option }) @@ -79,7 +97,7 @@ export default class RCSScript implements RCS { return Request.request.post('/api/workbench/RcsController@cancelTasks', { projectUUID: worldModel.state.project_uuid, catalogCode: worldModel.state.catalogCode, - envId: 1, + envId: worldModel.state.runState.currentEnvId, agvId: agvId, option }) @@ -89,7 +107,7 @@ export default class RCSScript implements RCS { return Request.request.post('/api/workbench/RcsController@agvToCharger', { projectUUID: worldModel.state.project_uuid, catalogCode: worldModel.state.catalogCode, - envId: 1, + envId: worldModel.state.runState.currentEnvId, agvId: agvId, chargerId, option diff --git a/src/types/RCS.d.ts b/src/types/RCS.d.ts index 5b837e9..08755d1 100644 --- a/src/types/RCS.d.ts +++ b/src/types/RCS.d.ts @@ -2,6 +2,17 @@ * RCS 机器人调度系统 API 接口 */ declare interface RCS { + + /** + * 启动项目 + */ + projectStart(): Promise> + + /** + * 停止项目 + */ + projectStop(): Promise> + /** * 获取机器人信息 * @param agvId