feat(M06-F): 接入订单设备自动联动任务
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user