|
@@ -415,34 +415,57 @@ export class DeviceService implements OnModuleInit {
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Interval(2 * 60 * 1000)
|
|
|
|
|
|
|
+ @Interval(60 * 1000)
|
|
|
async scheduleStoreNumber() {
|
|
async scheduleStoreNumber() {
|
|
|
await this.lock.acquire(
|
|
await this.lock.acquire(
|
|
|
'scheduleStoreNumber',
|
|
'scheduleStoreNumber',
|
|
|
async () => {
|
|
async () => {
|
|
|
const storeNumberDevicesNum = await this.sysConfigService.getString('store_number_devices_num', '')
|
|
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)
|
|
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', '')
|
|
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)) {
|
|
if (!/^\d{2}:\d{2}:\d{2},\d{2}:\d{2}:\d{2}$/.test(storeNumberTimeRange)) {
|
|
|
|
|
+ Logger.error('Invalid store_number_time_range', 'StoreNumber')
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
const [start, end] = storeNumberTimeRange.split(',').map((t) => parse(t, 'HH:mm:ss', new Date()))
|
|
const [start, end] = storeNumberTimeRange.split(',').map((t) => parse(t, 'HH:mm:ss', new Date()))
|
|
|
if (!isAfter(new Date(), start) || !isBefore(new Date(), end)) {
|
|
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
|
|
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
|
|
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)
|
|
.filter((d) => !d.busy)
|
|
|
.sort(() => Math.random() - 0.5)
|
|
.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(
|
|
this.eventsGateway.send(
|
|
|
{
|
|
{
|
|
|
id: randomUUID(),
|
|
id: randomUUID(),
|