fix(devices): 修复不同数据库类型下设备ID和机架ID的数值转换问题
修改设备ID和机架ID的数值转换逻辑,针对MySQL数据库使用SIGNED类型,其他数据库使用INTEGER类型,确保在不同数据库环境下都能正确获取最大值
This commit is contained in:
@@ -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',
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user