feat(M06-F): 接入订单设备自动联动任务

This commit is contained in:
Codex
2026-06-24 15:18:40 +08:00
parent e4941c2ffa
commit 8936ad1c6f
4 changed files with 331 additions and 2 deletions
+19 -1
View File
@@ -6,6 +6,11 @@ import type { AsyncTask, TaskType } from './task-repository.js';
import { TaskRepository } from './task-repository.js';
import { closeMySqlPool, createMySqlPool } from '../db/mysql.js';
import { loadConfig } from '../config.js';
import { MqttService } from '../mqtt/mqtt-service.js';
import { DeviceCommandService } from '../devices/device-command-service.js';
import { DeviceControlService } from '../devices/device-control-service.js';
import { IotMessageService } from '../devices/iot-message-service.js';
import { OrderDeviceAutomationService } from '../devices/order-device-automation-service.js';
type TaskHandler = (task: AsyncTask) => Promise<void>;
@@ -60,17 +65,30 @@ export function sleep(ms: number): Promise<void> {
if (process.argv[1] && fileURLToPath(import.meta.url) === resolve(process.argv[1])) {
const config = loadConfig();
const pool = createMySqlPool(config);
const iotMessages = new IotMessageService(pool);
const mqtt = new MqttService(config.mqtt, undefined, (topic, payload) =>
iotMessages.handle(topic, payload)
);
const deviceControl = new DeviceControlService(
pool,
new DeviceCommandService(iotMessages, mqtt)
);
const orderDevices = new OrderDeviceAutomationService(pool, deviceControl);
const worker = new TaskWorker({
repository: new TaskRepository(pool),
handlers: new Map(),
handlers: new Map([
['device.command', async (task) => { await orderDevices.handleTask(task); }]
]),
workerId: `${hostname()}:${process.pid}:${randomUUID()}`
});
const shutdown = () => worker.stop();
process.on('SIGINT', shutdown);
process.on('SIGTERM', shutdown);
try {
mqtt.start();
await worker.run();
} finally {
await mqtt.stop();
await closeMySqlPool(pool);
}
}