|
|
|
@ -9,6 +9,7 @@ import { AmrMsg } from '@/core/manager/amr/AmrMessageDefine' |
|
|
|
export default class EnvManager { |
|
|
|
private amrMessageManager: AmrMessageManager = new AmrMessageManager() |
|
|
|
public client: mqtt.MqttClient = null |
|
|
|
readonly stopSubscribe: StopSubscribe[] = [] |
|
|
|
|
|
|
|
onMqttConnect = (packet: IConnackPacket) => { |
|
|
|
console.log('Connected') |
|
|
|
@ -57,7 +58,10 @@ export default class EnvManager { |
|
|
|
const env = worldModel.state.runState.currentEnv |
|
|
|
try { |
|
|
|
worldModel.backendMessageReceiver.setProjectEnv(worldModel.state.project_uuid, worldModel.state.runState.currentEnvId) |
|
|
|
await LCC.loadInv() |
|
|
|
await this.loadInvToModel() |
|
|
|
this.stopSubscribe.push( |
|
|
|
worldModel.backendMessageReceiver.subscribe('InvUpdate', this.onInvUpdateMessage.bind(this)) |
|
|
|
) |
|
|
|
|
|
|
|
this.client = mqtt.connect(env.envConfig.mqtt.websocket, { |
|
|
|
path: '/mqtt', |
|
|
|
@ -83,6 +87,47 @@ export default class EnvManager { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async onInvUpdateMessage(type: BackendTopicType, topic: string, body: InvUpdateVo) { |
|
|
|
if (!window['Model']) { |
|
|
|
// 如果没有3D模型加载,则不处理库存更新
|
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
const lpnItem = Model.find(body.lpn) |
|
|
|
if (lpnItem) { |
|
|
|
Model.deleteItem(lpnItem.id) |
|
|
|
} |
|
|
|
|
|
|
|
if (body.after != null) { |
|
|
|
// 将托盘挪到目标位置
|
|
|
|
const after = body.after |
|
|
|
Model.createInv('pallet', body.lpn, after.rack, after.bay, after.level, after.cell) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 加载库存到3D视图上
|
|
|
|
async loadInvToModel() { |
|
|
|
if (!window['Model']) { |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
const invRes = await LCC.loadInv() |
|
|
|
if (!invRes.success) { |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
for (const row of invRes.data) { |
|
|
|
const bay = row.bay |
|
|
|
const cell = row.cell // : 0
|
|
|
|
const level = row.level // : 0
|
|
|
|
const loc_code = row.loc_code // : "rack1_0_0_0"
|
|
|
|
const lpn = row.lpn // : "LPN1"
|
|
|
|
const rack = row.rack // : "rack1"
|
|
|
|
const container_type = row.container_type // : "pallet"
|
|
|
|
Model.createInv(container_type, lpn, rack, bay, level, cell) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 加载执行器到3D视图上
|
|
|
|
async loadExecutorToModel() { |
|
|
|
if (!window['Model']) { |
|
|
|
@ -128,6 +173,12 @@ export default class EnvManager { |
|
|
|
system.showLoading() |
|
|
|
try { |
|
|
|
worldModel.state.runState.isRunning = false |
|
|
|
|
|
|
|
for (const stopFn of this.stopSubscribe) { |
|
|
|
stopFn() |
|
|
|
} |
|
|
|
this.stopSubscribe.length = 0 |
|
|
|
|
|
|
|
if (this.client) { |
|
|
|
this.client.removeAllListeners() |
|
|
|
this.client.end() |
|
|
|
|