feat: 增加LG/TCS-AGV接口并完善物料校验与Function逻辑

This commit is contained in:
XingCheng3
2026-07-16 16:47:45 +08:00
parent 7303ddde9a
commit 8e44e11248
74 changed files with 4324 additions and 1091 deletions

View 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)