account_info_db.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. const logger = require('../logger')
  2. var { db_config } = require('../../config/config.js')
  3. const utils = require('../utils.js')
  4. var mysql = require('mysql');
  5. var port = db_config.mysql.PORT
  6. var host = db_config.mysql.HOST
  7. var username = db_config.mysql.USERNAME
  8. var password = db_config.mysql.PASSWORD
  9. var database = db_config.mysql.DATABASE_MY_NODE
  10. var open_pool = db_config.mysql.OPEN_POOL
  11. var pool_size = db_config.mysql.POOL_SIZE
  12. var opts = {
  13. host: host,
  14. user: username,
  15. password: password,
  16. port: port,
  17. database: database,
  18. }
  19. var MYSQL_INSTANCE = null;
  20. //程序启动默认创建一个 mysql 连接
  21. createDefMysqlConnect();
  22. // 开始创建
  23. function createDefMysqlConnect() {
  24. disDefMysqlConnect();
  25. logger.log('createDefMysqlConnect', database)
  26. if (open_pool) {//创建连接池
  27. opts.connectionLimit = pool_size
  28. MYSQL_INSTANCE = mysql.createPool(opts);
  29. addConnEvent()
  30. } else {//创建单连接
  31. MYSQL_INSTANCE = mysql.createConnection(opts);
  32. addConnEvent()
  33. MYSQL_INSTANCE.connect();
  34. }
  35. return MYSQL_INSTANCE;
  36. }
  37. //关闭 mysql
  38. function disDefMysqlConnect() {
  39. if (MYSQL_INSTANCE) {
  40. if (open_pool) {
  41. MYSQL_INSTANCE.end();
  42. } else {
  43. MYSQL_INSTANCE.end();
  44. }
  45. MYSQL_INSTANCE = null;
  46. logger.debug('disDefMysqlConnect')
  47. }
  48. }
  49. function getMySqlInstance() {
  50. if (MYSQL_INSTANCE) return MYSQL_INSTANCE
  51. return createDefMysqlConnect();
  52. }
  53. function addConnEvent() {
  54. if (!MYSQL_INSTANCE) return
  55. if (open_pool) {
  56. MYSQL_INSTANCE.on('acquire', function (connection) {
  57. logger.log('Connection %d acquired', connection.threadId);
  58. });
  59. MYSQL_INSTANCE.on('connection', function (connection) {
  60. logger.log('mysql connection', connection.threadId);
  61. });
  62. MYSQL_INSTANCE.on('enqueue', function () {
  63. logger.log('Waiting for available connection slot');
  64. });
  65. MYSQL_INSTANCE.on('release', function (connection) {
  66. logger.log('Connection %d released', connection.threadId);
  67. });
  68. } else {
  69. // logger.log('connected to mysql ps=', db_config.mysql)
  70. MYSQL_INSTANCE.on('connect', () => {
  71. logger.log('connected to mysql')
  72. })
  73. MYSQL_INSTANCE.on('error', function (err) {
  74. logger.error('mysql Error =>', err);
  75. });
  76. MYSQL_INSTANCE.on('restart', function () {
  77. logger.error('mysql restart =>');
  78. });
  79. }
  80. }
  81. async function getAccountBalances_(opts) {
  82. logger.log('getAccountBalances', opts)
  83. var sql_main = 'select * from '
  84. var sql_table_name = ' user_banlance '
  85. var sql_where = ' WHERE '
  86. var sql_where_name = ' id= ? '
  87. var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
  88. var query_account_balances_sql = new_sql
  89. var query_account_balances_params = [withdrawId]
  90. return new Promise((resolve) => {
  91. getMySqlInstance().getConnection(function (err, connection) {
  92. if (err) {
  93. logger.error('getAccountBalances error', err)
  94. logger.error('getAccountBalances sql', create_withdraw_sql)
  95. resolve(null);
  96. return;
  97. }
  98. connection.query(
  99. query_account_balances_sql, query_account_balances_params,
  100. function selectCb(error, results) {
  101. if (error) {
  102. logger.error('create_collect_coins_task', error, query_account_balances_sql, query_account_balances_params)
  103. resolve(null);
  104. return;
  105. }
  106. logger.log('create_collect_coins_task ret=', error, results);
  107. //用完当前连接需要释放,归还给连接池
  108. connection.release();
  109. resolve({
  110. err: error,
  111. results: results
  112. });
  113. }
  114. );
  115. })
  116. })
  117. }
  118. async function getAccountTransactions_(opts) {
  119. logger.log('getAccountTransactions', opts)
  120. var sql_main = 'select * from '
  121. var sql_table_name = ' user_transaction_log '
  122. var sql_where = ' WHERE '
  123. var sql_where_name = ' usr_to_address=? AND block_num>=?'
  124. var query_account_transactions_params = [opts.address, opts.from_block ? opts.from_block : 1]
  125. if (opts.type == 'native') {
  126. sql_where_name = ' usr_to_address=? AND block_num>=? AND token_address=? '
  127. query_account_transactions_params = [opts.address, opts.from_block ? opts.from_block : 1, '0x0000000000000000000000000000000000000000']
  128. } else if (opts.type == 'token') {
  129. sql_where_name = ' usr_to_address=? AND block_num>=? AND token_address!=? '
  130. query_account_transactions_params = [opts.address, opts.from_block ? opts.from_block : 1, '0x0000000000000000000000000000000000000000']
  131. } else if (opts.type == 'hash') {
  132. sql_where_name = ' trx_hash=? '
  133. query_account_transactions_params = [opts.transaction_hash, opts.from_block ? opts.from_block : 1, '0x0000000000000000000000000000000000000000']
  134. }
  135. var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
  136. var query_account_transactions_sql = new_sql
  137. return new Promise((resolve) => {
  138. getMySqlInstance().getConnection(function (err, connection) {
  139. if (err) {
  140. logger.error('getAccountTransactions_', err)
  141. logger.error('getAccountTransactions_', query_account_transactions_sql)
  142. resolve(null);
  143. return;
  144. }
  145. connection.query(
  146. query_account_transactions_sql, query_account_transactions_params,
  147. function selectCb(error, results) {
  148. if (error) {
  149. logger.error('getAccountTransactions_', error, query_account_transactions_sql, query_account_transactions_params)
  150. resolve(null);
  151. return;
  152. }
  153. //用完当前连接需要释放,归还给连接池
  154. connection.release();
  155. resolve({
  156. results: results
  157. });
  158. }
  159. );
  160. })
  161. })
  162. }
  163. async function getAccountBalances(opts) {
  164. }
  165. async function getAccountTransactions(opts) {
  166. var ret = await getAccountTransactions_(opts);
  167. if (ret && ret.results) {
  168. if (ret.results && Array.isArray(ret.results) && ret.results.length > 0) {
  169. try {
  170. var results = []
  171. ret.results.forEach(element => {
  172. var isNativeTrans = element.token_address == '0x0000000000000000000000000000000000000000'
  173. element.type = isNativeTrans == true ? 'native' : 'token'
  174. element.gas = element.gas.toString()
  175. element.gas_price = element.gas_price.toString()
  176. try {
  177. element.value = utils.scientificNotationToString(element.value).toString()
  178. } catch (error) {
  179. element.value = element.value.toString();
  180. }
  181. logger.log('getAccountTransactions_ element:', element)
  182. results.push({
  183. type: isNativeTrans == true ? 'native' : 'token',
  184. from_address: element.usr_from_address,
  185. to_address: element.usr_to_address,
  186. token_address: isNativeTrans == false ? element.token_address : null,
  187. block_number: element.block_num.toString(),
  188. value: element.value,
  189. gas: element.gas,
  190. gas_price: element.gas_price,
  191. block_timestamp: utils.getTimestampToDate(element.block_tm*1000),
  192. trx_hash: element.trx_hash,
  193. responseType:'yqcx'
  194. })
  195. });
  196. ret.results = results
  197. } catch (error) {
  198. }
  199. logger.log('getAccountTransactions_ respose:', ret)
  200. return {
  201. code: 0,
  202. data: {
  203. total: ret.results.length,
  204. results: ret.results
  205. },
  206. errMsg: null,
  207. }
  208. }
  209. }
  210. return {
  211. code: 0,
  212. data: {
  213. total: 0,
  214. results: []
  215. },
  216. errMsg: null,
  217. }
  218. }
  219. module.exports = {
  220. getAccountBalances,
  221. getAccountTransactions,
  222. }