feat: 增加LG/TCS-AGV接口并完善物料校验与Function逻辑
This commit is contained in:
115
DatabaseScripts/TCS_AGV接口仿真服务.mjs
Normal file
115
DatabaseScripts/TCS_AGV接口仿真服务.mjs
Normal file
@@ -0,0 +1,115 @@
|
||||
import http from 'node:http'
|
||||
|
||||
const host = '127.0.0.1'
|
||||
const port = Number(process.env.TCS_MOCK_PORT || 18080)
|
||||
const tasks = new Map()
|
||||
|
||||
const sendJson = (response, payload, statusCode = 200) => {
|
||||
response.writeHead(statusCode, { 'Content-Type': 'application/json; charset=utf-8' })
|
||||
response.end(JSON.stringify(payload))
|
||||
}
|
||||
|
||||
const success = result => ({
|
||||
success: true,
|
||||
message: '仿真接口调用成功',
|
||||
code: 200,
|
||||
result,
|
||||
timestamp: Date.now()
|
||||
})
|
||||
|
||||
const readBody = request => new Promise((resolve, reject) => {
|
||||
let body = ''
|
||||
request.setEncoding('utf8')
|
||||
request.on('data', chunk => { body += chunk })
|
||||
request.on('end', () => {
|
||||
if (!body) {
|
||||
resolve({})
|
||||
return
|
||||
}
|
||||
try {
|
||||
resolve(JSON.parse(body))
|
||||
} catch (error) {
|
||||
reject(error)
|
||||
}
|
||||
})
|
||||
request.on('error', reject)
|
||||
})
|
||||
|
||||
const server = http.createServer(async (request, response) => {
|
||||
const url = new URL(request.url, `http://${host}:${port}`)
|
||||
try {
|
||||
if (request.method === 'POST' && url.pathname === '/api/createExternalBusinessTask') {
|
||||
const body = await readBody(request)
|
||||
tasks.set(body.externalCode, body)
|
||||
console.log('CREATE', JSON.stringify(body))
|
||||
sendJson(response, success({ externalCode: body.externalCode }))
|
||||
return
|
||||
}
|
||||
|
||||
if (request.method === 'GET' && url.pathname === '/api/getExternalBusinessTaskStatus') {
|
||||
const externalCode = url.searchParams.get('externalCode') || ''
|
||||
sendJson(response, success([{
|
||||
externalCode,
|
||||
status: '1',
|
||||
ip: '10.146.79.9',
|
||||
type: tasks.get(externalCode)?.type || 'nav_action_program',
|
||||
beginTime: '2026-07-13 14:40:00',
|
||||
endTime: '',
|
||||
remark: '仿真状态同步'
|
||||
}]))
|
||||
return
|
||||
}
|
||||
|
||||
if (request.method === 'GET' && url.pathname === '/api/getMcrInfo') {
|
||||
sendJson(response, success([{
|
||||
name: 'AGV-01',
|
||||
ip: '10.146.79.9',
|
||||
speed: 0,
|
||||
power: 80,
|
||||
autoCharging: '1',
|
||||
chargingThreshold: 20,
|
||||
status: '0',
|
||||
currentPos: 'S000214',
|
||||
control: '1',
|
||||
CameraInfo: ''
|
||||
}]))
|
||||
return
|
||||
}
|
||||
|
||||
const successfulGetRoutes = new Set([
|
||||
'/api/cancelExternalBusinessTask',
|
||||
'/api/stopExternalBusinessTask',
|
||||
'/api/reset',
|
||||
'/api/stopNow'
|
||||
])
|
||||
if (request.method === 'GET' && successfulGetRoutes.has(url.pathname)) {
|
||||
console.log('GET', url.pathname, url.search)
|
||||
sendJson(response, success('成功'))
|
||||
return
|
||||
}
|
||||
|
||||
sendJson(response, {
|
||||
success: false,
|
||||
message: `未实现的仿真路由:${request.method} ${url.pathname}`,
|
||||
code: 500,
|
||||
result: null,
|
||||
timestamp: Date.now()
|
||||
}, 404)
|
||||
} catch (error) {
|
||||
sendJson(response, {
|
||||
success: false,
|
||||
message: error.message,
|
||||
code: 500,
|
||||
result: null,
|
||||
timestamp: Date.now()
|
||||
}, 500)
|
||||
}
|
||||
})
|
||||
|
||||
server.listen(port, host, () => {
|
||||
console.log(`TCS AGV mock listening on http://${host}:${port}`)
|
||||
})
|
||||
|
||||
const close = () => server.close(() => process.exit(0))
|
||||
process.on('SIGINT', close)
|
||||
process.on('SIGTERM', close)
|
||||
Reference in New Issue
Block a user