feat: 为 G5 room_status 写入添加强制 online_status 为 1 的功能,并确保冲突时始终更新,即使业务字段未变化

This commit is contained in:
2026-03-10 19:52:14 +08:00
parent 2f8857f98e
commit 360d11222f
3 changed files with 72 additions and 8 deletions

View File

@@ -589,12 +589,47 @@ describe('DatabaseManager: room_status upsert SQL', () => {
includeGuid: false,
autoCreatePartitions: false,
tableRef: 'room_status.room_status_moment_g5',
forceOnlineStatusOnWrite: true,
forceUpdateOnConflict: true,
logPrefix: 'upsertRoomStatusG5',
});
assert.match(built.sql, /ON CONFLICT \(hotel_id, room_id\)/);
assert.doesNotMatch(built.sql, /ts_ms = EXCLUDED\.ts_ms/);
assert.equal(/guid/.test(built.sql), false);
});
it('forces online_status to 1 for g5 room_status insert and update', () => {
const dm = new DatabaseManager({ host: 'x', port: 5432, user: 'x', password: 'x', database: 'x', roomStatusTable: 'room_status.room_status_moment_g5' });
const built = dm._buildRoomStatusUpsertQuery([buildBasePayload()], {
tableName: 'room_status.room_status_moment_g5',
conflictColumns: ['hotel_id', 'room_id'],
includeGuid: false,
autoCreatePartitions: false,
tableRef: 'room_status.room_status_moment_g5',
forceOnlineStatusOnWrite: true,
forceUpdateOnConflict: true,
logPrefix: 'upsertRoomStatusG5',
});
assert.match(built.sql, /INSERT INTO room_status\.room_status_moment_g5 \(.*online_status\)/s);
assert.match(built.sql, /online_status = 1/);
assert.equal(built.values[built.values.length - 1], 1);
});
it('always updates g5 room_status on conflict even when business fields are unchanged', () => {
const dm = new DatabaseManager({ host: 'x', port: 5432, user: 'x', password: 'x', database: 'x', roomStatusTable: 'room_status.room_status_moment_g5' });
const built = dm._buildRoomStatusUpsertQuery([buildBasePayload()], {
tableName: 'room_status.room_status_moment_g5',
conflictColumns: ['hotel_id', 'room_id'],
includeGuid: false,
autoCreatePartitions: false,
tableRef: 'room_status.room_status_moment_g5',
forceOnlineStatusOnWrite: true,
forceUpdateOnConflict: true,
logPrefix: 'upsertRoomStatusG5',
});
assert.doesNotMatch(built.sql, /room_status\.room_status_moment_g5\.ts_ms <= EXCLUDED\.ts_ms/);
assert.doesNotMatch(built.sql, /IS DISTINCT FROM EXCLUDED/);
});
});
describe('DatabaseManager: insertHeartbeatEventsDual', () => {