fix(devices): 修复不同数据库类型下设备ID和机架ID的数值转换问题

修改设备ID和机架ID的数值转换逻辑,针对MySQL数据库使用SIGNED类型,其他数据库使用INTEGER类型,确保在不同数据库环境下都能正确获取最大值
This commit is contained in:
zhang1106
2026-04-10 14:34:33 +08:00
parent dd0ce03369
commit 1d297fc81a
+22 -8
View File
@@ -731,7 +731,17 @@ async function generateDeviceId() {
},
},
attributes: [
[sequelize.fn('MAX', sequelize.literal('CAST(SUBSTR(deviceId, 4) AS INTEGER)')), 'maxNum'],
[
sequelize.fn(
'MAX',
sequelize.literal(
dbDialect === 'mysql'
? 'CAST(SUBSTR(deviceId, 4) AS SIGNED)'
: 'CAST(SUBSTR(deviceId, 4) AS INTEGER)'
)
),
'maxNum',
],
],
raw: true,
});
@@ -1112,12 +1122,14 @@ router.post('/import', async (req, res) => {
Device.findOne({
attributes: [
[
sequelize.fn(
'MAX',
sequelize.cast(sequelize.fn('SUBSTR', sequelize.col('deviceId'), 4), 'INTEGER')
),
'maxNum',
],
sequelize.fn(
'MAX',
dbDialect === 'mysql'
? sequelize.cast(sequelize.fn('SUBSTR', sequelize.col('deviceId'), 4), 'SIGNED')
: sequelize.cast(sequelize.fn('SUBSTR', sequelize.col('deviceId'), 4), 'INTEGER')
),
'maxNum',
],
],
where: { deviceId: { [Op.like]: 'DEV%' } },
transaction: t,
@@ -1268,7 +1280,9 @@ router.post('/import', async (req, res) => {
[
sequelize.fn(
'MAX',
sequelize.cast(sequelize.fn('SUBSTR', sequelize.col('rackId'), 5), 'INTEGER')
dbDialect === 'mysql'
? sequelize.cast(sequelize.fn('SUBSTR', sequelize.col('rackId'), 5), 'SIGNED')
: sequelize.cast(sequelize.fn('SUBSTR', sequelize.col('rackId'), 5), 'INTEGER')
),
'maxNum',
],