fofstudio-mcpservererp
Version:
fofstudio
279 lines (273 loc) • 7.39 kB
JavaScript
const mysql = require('mysql')
const fs = require('fs');
let pool = [];
let transactionObj = undefined;
let ifFile = true;
exports.sendmysql = (funStr, host, user, password, database, port, connectionLimit, Obj = {}) => {
try {
let ObjData = {
host: host,
user: user,
password: password,
database: database,
port: port,
waitForConnection: true,
connectionLimit: connectionLimit,
queueLimit: 0
};
const keys = Object.keys(Obj);
keys.forEach(key => {
ObjData[key] = Obj[key]
});
let poolID = pool.length
pool[pool.length] = mysql.createPool(ObjData);
setTimeout(() => {
let RetQue = query_("select database()", poolID)
if (RetQue == undefined) {
funStr({ "状态": "连接失败,请检查连接参数是否正确!" })
} else {
RetQue.then(res => {
funStr({ "状态": "连接成功" })
}).catch(err => funStr({ "状态": "连接失败", "失败原因": err }))
}
}, 3000);
return poolID;
} catch (err) {
funStr({ "状态": "连接失败", "失败原因": err })
return -1;
}
}
function query_(sql, poolID = 0) {
if (ifFile == false) {
return;
}
if (pool.length <= 0) {
return undefined;
}
try {
return new Promise((resolve, reject) => {
pool[poolID].getConnection((err, con) => {
if (err) reject(err)
try {
con.query(sql, (err, result) => {
if (err) reject(err)
else resolve(result)
con.release()
})
} catch (error) {
reject(error)
}
});
})
} catch (err) {
return undefined;
}
}
exports.query = (sql, params, poolID = 0, fun_ = undefined) => {
if (fun_ != undefined) {
if (ifFile == false) {
fun_({ "状态": "失败", "数据": "拒绝查询" })
return;
}
if (pool.length <= 0) {
fun_({ "状态": "失败", "数据": "未正确连接数据库!" })
return;
}
pool[poolID].getConnection((err, con) => {
if (err) {
fun_({ "状态": "失败", "数据": err })
} else {
con.query(sql, params, (err, result, fields) => {
if (err) {
fun_({ "状态": "失败", "数据": err, "fields": fields })
} else {
fun_({ "状态": "成功", "数据": result, "fields": fields })
}
})
}
con.release()
});
} else {
if (ifFile == false) {
return undefined;
}
if (pool.length <= 0) {
return undefined;
}
return new Promise((resolve, reject) => {
if (transactionObj != undefined) {
transactionObj.query(sql, params, (err, result, fields) => {
if (err) reject(err)
else resolve(result)
})
} else {
pool[poolID].getConnection((err, con) => {
if (err) reject(err)
con.query(sql, params, (err, result, fields) => {
if (err) reject(err)
else resolve(result)
con.release()
})
});
}
})
}
}
exports.exec = (sql, params, poolID = 0, fun_ = undefined) => {
if (fun_ != undefined) {
if (ifFile == false) {
fun_({ "状态": "失败", "数据": "拒绝查询", "数据2": {} })
return;
}
if (pool.length <= 0) {
fun_({ "状态": "失败", "数据": "未正确连接数据库!", "数据2": {} })
return;
}
pool[poolID].getConnection((err, con) => {
if (err) {
fun_({ "状态": "失败", "数据": err, "数据2": {} })
} else {
con.query(sql, params, (err, result) => {
if (err) {
fun_({ "状态": "失败", "数据": err, "数据2": {} })
} else {
try {
fun_({ "状态": "成功", "数据": result && result.affectedRows > 0, "数据2": result })
} catch (error) {
fun_({ "状态": "成功", "数据": result, "数据2": result })
}
}
})
}
con.release()
});
} else {
if (ifFile == false) {
return undefined;
}
if (pool.length <= 0) {
return undefined;
}
return new Promise((resolve, reject) => {
if (transactionObj != undefined) {
transactionObj.query(sql, params, (err, result) => {
if (err) reject(err)
else resolve(result)
})
} else {
pool[poolID].getConnection((err, con) => {
con.query(sql, params, (err, result) => {
if (err) reject(err)
else resolve(result)
con.release()
})
});
}
})
}
}
exports.execTransaction = async (sqlArr, poolID = 0, funType, TransactionType = {}) => {
if (ifFile == false) {
return;
}
if (pool.length <= 0) {
if (funType != undefined) {
funType({ "状态": "失败" })
} else {
return { "状态": "失败" };
}
}
if (sqlArr.length <= 0) {
if (funType != undefined) {
if (TransactionType["类型"] == "开始事务") {
pool[poolID].getConnection((err, con) => {
transactionObj = con;
transactionObj.beginTransaction(err => {
if (err) {
funType({ "状态": "开始事务失败", "数据": err })
} else {
funType({ "状态": "开始事务成功" })
}
})
});
}
if (TransactionType["类型"] == "保存事务") {
if (transactionObj == undefined) {
funType({ "状态": "保存事务失败", "原因": "未开启事务" })
return;
}
transactionObj.commit((error) => {
transactionObj.release()
transactionObj = undefined;
if (error) {
funType({ "状态": "保存事务失败", "数据": error })
} else {
funType({ "状态": "保存事务成功" })
}
})
}
if (TransactionType["类型"] == "回滚事务") {
if (transactionObj == undefined) {
funType({ "状态": "回滚事务失败", "原因": "未开启事务" })
return;
}
transactionObj.rollback((error) => {
transactionObj.release()
transactionObj = undefined;
if (error) {
funType({ "状态": "回滚事务失败", "数据": error })
} else {
funType({ "状态": "回滚事务成功" })
}
})
}
return;
} else {
if (TransactionType["类型"] == "开始事务") {
return { "状态": "开始事务失败", "原因": "Mysql不支持同步命令事务操作" };
}
if (TransactionType["类型"] == "保存事务") {
return { "状态": "保存事务失败", "原因": "Mysql不支持同步命令事务操作" };
}
if (TransactionType["类型"] == "回滚事务") {
return { "状态": "回滚事务失败", "原因": "Mysql不支持同步命令事务操作" };
}
}
return;
}
return new Promise((resolve, reject) => {
pool[poolID].getConnection((err, con) => {
con.beginTransaction(err => {
if (err) reject(err)
promiseArr = sqlArr.map(({ sql, values }) => {
return new Promise((resolve, reject) => {
con.query(sql, values, (e, rows, fields) => {
e ? reject(e) : resolve({ rows, success: true })
})
})
})
Promise.all(promiseArr).then(res => {
con.commit((error) => {
if (error) {
//console.log('事务提交失败')
reject(error)
}
})
resolve(res)
}).catch(err => {
con.rollback(() => {
//console.log('数据操作回滚')
})
reject(err)
})
con.release()
})
});
})
}
exports.endPool = (poolID = 0) => {
if (pool.length <= -1) {
return undefined;
}
pool[poolID].end()
}