UNPKG

fofstudio-mcpservererp

Version:

fofstudio

279 lines (273 loc) 7.39 kB
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() }