소스 검색

refactor(device-service): 优化存储号码调度逻辑

- 优化存储号码调度逻辑,增加错误日志记录
- 添加日志记录,用于调试和错误追踪
xiongzhu 1 년 전
부모
커밋
547c04940c
1개의 변경된 파일32개의 추가작업 그리고 9개의 파일을 삭제
  1. 32 9
      src/device/device.service.ts

+ 32 - 9
src/device/device.service.ts

@@ -415,34 +415,57 @@ export class DeviceService implements OnModuleInit {
         )
     }
 
-    @Interval(2 * 60 * 1000)
+    @Interval(60 * 1000)
     async scheduleStoreNumber() {
         await this.lock.acquire(
             'scheduleStoreNumber',
             async () => {
                 const storeNumberDevicesNum = await this.sysConfigService.getString('store_number_devices_num', '')
-                if (!/^\d+,\d+$/.test(storeNumberDevicesNum)) return
+                if (!/^\d+,\d+$/.test(storeNumberDevicesNum)) {
+                    Logger.error('Invalid store_number_devices_num', 'StoreNumber')
+                    return
+                }
                 const [min, max] = storeNumberDevicesNum.split(',').map(Number)
-                if (!(max > min && min > 0)) return
+                if (!(max > min && min > 0)) {
+                    Logger.error('Invalid store_number_devices_num', 'StoreNumber')
+                    return
+                }
                 const storeNumberTimeRange = await this.sysConfigService.getString('store_number_time_range', '')
                 if (!/^\d{2}:\d{2}:\d{2},\d{2}:\d{2}:\d{2}$/.test(storeNumberTimeRange)) {
+                    Logger.error('Invalid store_number_time_range', 'StoreNumber')
                     return
                 }
                 const [start, end] = storeNumberTimeRange.split(',').map((t) => parse(t, 'HH:mm:ss', new Date()))
                 if (!isAfter(new Date(), start) || !isBefore(new Date(), end)) {
+                    Logger.error('Invalid store_number_time_range', 'StoreNumber')
+                    return
+                }
+                var devices = await this.deviceRepository.findBy({ online: true, canSend: true })
+                if (devices.filter((d) => !d.busy).length / devices.length < 0.5) {
+                    Logger.log('Too many devices are busy', 'StoreNumber')
                     return
                 }
-                const devices = await this.deviceRepository.findBy({ online: true, canSend: true })
-                if (devices.filter((d) => !d.busy).length / devices.length < 0.5) return
 
                 const currentNum = devices.filter((d) => d.storing).length
-                if (currentNum >= min) return
-                const num = max - currentNum
+                if (currentNum >= min) {
+                    Logger.log('Current number is enough', 'StoreNumber')
+                    return
+                }
 
-                for (let device of devices
+                devices = devices
                     .filter((d) => !d.busy)
                     .sort(() => Math.random() - 0.5)
-                    .slice(0, Math.min(num, 20))) {
+                    .slice(0, Math.min(max - currentNum, 20))
+
+                Logger.log(`StoreNumber ${devices.length} devices`, 'StoreNumber')
+
+                if (devices.length === 0) {
+                    Logger.log('No devices to storeNumber', 'StoreNumber')
+                    return
+                }
+
+                for (let device of devices) {
+                    Logger.log(`send storeNumber to ${device.name}`, 'StoreNumber')
                     this.eventsGateway.send(
                         {
                             id: randomUUID(),