feat: 模拟采集集成——后端SimulatorController(22端点代理转发)+前端总览/详情页+路由+侧边栏菜单+Mock数据
parent
4b70b8eacf
commit
72cb43c493
@ -0,0 +1,223 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
import type { ApiResponse } from '@/types'
|
||||||
|
|
||||||
|
// --- 模拟器数据模型 ---
|
||||||
|
|
||||||
|
/** 模拟器连接状态 */
|
||||||
|
export interface SimulatorPing {
|
||||||
|
running: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 数据库采集地址(模拟器返回) */
|
||||||
|
export interface SimulatorAddress {
|
||||||
|
dbId: number
|
||||||
|
name: string
|
||||||
|
url: string
|
||||||
|
machineCount: number
|
||||||
|
machines: { id: number; deviceCode: string; name: string }[]
|
||||||
|
isRunning: boolean
|
||||||
|
runningPort: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 模拟状态汇总 */
|
||||||
|
export interface SimulatorStatus {
|
||||||
|
dbAddressId: number
|
||||||
|
name: string
|
||||||
|
port: number
|
||||||
|
isRunning: boolean
|
||||||
|
totalDevices: number
|
||||||
|
onlineDevices: number
|
||||||
|
requestCount: number
|
||||||
|
dataChangeInterval: number
|
||||||
|
totalParts: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 设备状态 */
|
||||||
|
export interface DeviceStatus {
|
||||||
|
deviceCode: string
|
||||||
|
desc: string
|
||||||
|
scenario: string
|
||||||
|
isOnline: boolean
|
||||||
|
programName: string
|
||||||
|
partCount: number
|
||||||
|
runStatus: number
|
||||||
|
operateMode: number
|
||||||
|
spindleSpeedSet: number
|
||||||
|
spindleSpeedActual: number
|
||||||
|
feedSpeedSet: number
|
||||||
|
feedSpeedActual: number
|
||||||
|
spindleLoad: number
|
||||||
|
machiningStatus: string
|
||||||
|
scenarioTick: number
|
||||||
|
scenarioDuration: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 单地址详情状态 */
|
||||||
|
export interface AddressStatus {
|
||||||
|
name: string
|
||||||
|
port: number
|
||||||
|
isRunning: boolean
|
||||||
|
requestCount: number
|
||||||
|
successCount: number
|
||||||
|
failCount: number
|
||||||
|
totalDevices: number
|
||||||
|
onlineDevices: number
|
||||||
|
dataChangeInterval: number
|
||||||
|
scenarioMode: string
|
||||||
|
networkError: string
|
||||||
|
startTime: string
|
||||||
|
uptime: string
|
||||||
|
devices: DeviceStatus[]
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 零件统计 */
|
||||||
|
export interface AddressStats {
|
||||||
|
totalDevices: number
|
||||||
|
onlineDevices: number
|
||||||
|
totalParts: number
|
||||||
|
partsByDevice: Record<string, {
|
||||||
|
desc: string
|
||||||
|
totalParts: number
|
||||||
|
currentProgram: string
|
||||||
|
currentPartCount: number
|
||||||
|
programs: Record<string, number>
|
||||||
|
}>
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 请求日志 */
|
||||||
|
export interface SimulatorLog {
|
||||||
|
index: number
|
||||||
|
timestamp: string
|
||||||
|
deviceCount: number
|
||||||
|
keyData: string
|
||||||
|
duration: number
|
||||||
|
fullJson: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 事件历史 */
|
||||||
|
export interface EventHistory {
|
||||||
|
timestamp: string
|
||||||
|
deviceCode: string
|
||||||
|
eventType: string
|
||||||
|
oldProgram: string
|
||||||
|
newProgram: string
|
||||||
|
partCountBefore: number
|
||||||
|
partCountAfter: number
|
||||||
|
detail: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- 网关API ---
|
||||||
|
|
||||||
|
/** 探测模拟器是否运行 */
|
||||||
|
export function pingSimulator() {
|
||||||
|
return request.get<SimulatorPing>('/admin/simulator/ping')
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取数据库采集地址列表 */
|
||||||
|
export function fetchSimulatorAddresses() {
|
||||||
|
return request.get<SimulatorAddress[]>('/admin/simulator/addresses')
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取所有模拟状态汇总 */
|
||||||
|
export function fetchSimulatorStatus() {
|
||||||
|
return request.get<SimulatorStatus[]>('/admin/simulator/status')
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 启动指定地址的模拟 */
|
||||||
|
export function startSimulator(data: { dbAddressId: number; deviceCodes?: string[] }) {
|
||||||
|
return request.post('/admin/simulator/start', data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 停止指定地址的模拟 */
|
||||||
|
export function stopSimulator(data: { dbAddressId: number }) {
|
||||||
|
return request.post('/admin/simulator/stop', data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 启动所有地址的模拟 */
|
||||||
|
export function startAllSimulators() {
|
||||||
|
return request.post('/admin/simulator/start-all')
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 停止所有地址的模拟 */
|
||||||
|
export function stopAllSimulators() {
|
||||||
|
return request.post('/admin/simulator/stop-all')
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重新加载数据库配置 */
|
||||||
|
export function reloadSimulator() {
|
||||||
|
return request.post('/admin/simulator/reload')
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- 单地址API ---
|
||||||
|
|
||||||
|
/** 获取单地址状态 */
|
||||||
|
export function fetchAddressStatus(port: number) {
|
||||||
|
return request.get<AddressStatus>(`/admin/simulator/address/${port}/status`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 启动单地址数据模拟 */
|
||||||
|
export function startAddressSimulation(port: number) {
|
||||||
|
return request.post(`/admin/simulator/address/${port}/start`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 停止单地址数据模拟 */
|
||||||
|
export function stopAddressSimulation(port: number) {
|
||||||
|
return request.post(`/admin/simulator/address/${port}/stop`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 触发设备事件 */
|
||||||
|
export function triggerDeviceEvent(port: number, data: { deviceId: string; eventType: string }) {
|
||||||
|
return request.post(`/admin/simulator/address/${port}/event`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改数据变化频率 */
|
||||||
|
export function setAddressInterval(port: number, data: { value: number }) {
|
||||||
|
return request.post(`/admin/simulator/address/${port}/interval`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 设置网络异常类型 */
|
||||||
|
export function setNetworkError(port: number, data: { type: string }) {
|
||||||
|
return request.post(`/admin/simulator/address/${port}/network`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 切换剧本模式 */
|
||||||
|
export function setScenarioMode(port: number, data: { mode: string }) {
|
||||||
|
return request.post(`/admin/simulator/address/${port}/mode`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取请求日志 */
|
||||||
|
export function fetchAddressLogs(port: number) {
|
||||||
|
return request.get<SimulatorLog[]>(`/admin/simulator/address/${port}/logs`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取零件统计 */
|
||||||
|
export function fetchAddressStats(port: number) {
|
||||||
|
return request.get<AddressStats>(`/admin/simulator/address/${port}/stats`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 添加设备 */
|
||||||
|
export function addDevice(port: number, data: { deviceCode: string; desc: string }) {
|
||||||
|
return request.post(`/admin/simulator/address/${port}/add-device`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 移除设备 */
|
||||||
|
export function removeDevice(port: number, data: { deviceCode: string }) {
|
||||||
|
return request.post(`/admin/simulator/address/${port}/remove-device`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取事件历史 */
|
||||||
|
export function fetchEventHistory(port: number) {
|
||||||
|
return request.get<EventHistory[]>(`/admin/simulator/address/${port}/event-history`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取完整汇总 */
|
||||||
|
export function fetchFullSummary(port: number) {
|
||||||
|
return request.get(`/admin/simulator/address/${port}/full-summary`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取异常日志 */
|
||||||
|
export function fetchErrorLog(port: number) {
|
||||||
|
return request.get(`/admin/simulator/address/${port}/error-log`)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {}
|
||||||
Loading…
Reference in New Issue