withdraw_db.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. const mysql = require("./mysql_db")
  2. const logger = require('../logger')
  3. var { db_config } = require('../../config/config.js')
  4. const utils = require('../utils.js')
  5. /**
  6. * 创建提币任务
  7. *
  8. * @param {*} task_obj
  9. */
  10. async function create_withdraw_task(task_obj) {
  11. logger.log('create_withdraw_task', task_obj)
  12. // 提币 id
  13. var withdraw_id = task_obj.withdraw_id;
  14. if (!withdraw_id) {
  15. return {
  16. code: -1,
  17. error: 'withdraw_id cannot be empty.'
  18. }
  19. }
  20. //提币任务创建时间
  21. var withdraw_create_time = utils.getTimestamp();
  22. var from_address = task_obj.user_address
  23. var to_address = task_obj.receiver
  24. var contract_address = task_obj.contractAddress
  25. var chain_id = parseInt(utils.getChainId(task_obj.chain))
  26. var type = task_obj.type
  27. var amount = task_obj.amount
  28. if (chain_id == 2019)
  29. switch (type) {
  30. case 'erc20':
  31. type = 'token'
  32. break
  33. }
  34. if (!from_address || !to_address) {
  35. return {
  36. code: -1,
  37. error: 'from_address and to_address cannot be empty.'
  38. }
  39. }
  40. var create_withdraw_sql = 'INSERT INTO withdraw_manage (withdraw_id,withdraw_status,create_time,from_address,to_address,chain_id,type,contract_address,amount)' +
  41. 'VALUES(?,?,?,?,?,?,?,?,?)'
  42. var create_withdraw_params = [withdraw_id, 1, withdraw_create_time, from_address, to_address, chain_id, type, contract_address ? contract_address : '', amount]
  43. logger.log('create_withdraw_task create_withdraw_sql', create_withdraw_sql);
  44. return new Promise((resolve) => {
  45. mysql.getMySqlInstance().getConnection(function (err, connection) {
  46. if (err) {
  47. logger.error('create_withdraw_task', err)
  48. logger.error('create_withdraw_sql', create_withdraw_sql)
  49. resolve(null);
  50. return;
  51. }
  52. connection.query(
  53. create_withdraw_sql, create_withdraw_params,
  54. function selectCb(error, results) {
  55. if (error) {
  56. logger.error('create_withdraw_task', error, create_withdraw_sql, create_withdraw_params)
  57. resolve(null);
  58. return;
  59. }
  60. logger.log('create_withdraw_task ret=', error, results);
  61. //用完当前连接需要释放,归还给连接池
  62. connection.release();
  63. resolve({
  64. err: error,
  65. results: results.insertId
  66. });
  67. }
  68. );
  69. })
  70. })
  71. }
  72. /**
  73. * 更新提币任务
  74. * @param {*} task_obj
  75. */
  76. function update_withdraw_task(withdraw_id, ret_obj) {
  77. logger.log('update_withdraw_task', ret_obj, withdraw_id)
  78. // 提币 id
  79. var withdraw_id = withdraw_id;
  80. if (!withdraw_id) {
  81. return {
  82. code: -1,
  83. error: 'withdraw_id cannot be empty.'
  84. }
  85. }
  86. var update_withdraw_sql = 'update withdraw_manage SET withdraw_status=?,withdraw_hash=?,nonce=?,update_time=?,gas_price=?,gas_limit=?,value=?,errorMsg=? WHERE withdraw_id=?'
  87. var status = ret_obj.withdraw_status
  88. var hash = ret_obj.withdraw_hash
  89. var nonce = ret_obj.nonce
  90. var update_time = ret_obj.update_time
  91. var gas_price = ret_obj.gas_price
  92. var gas_limit = ret_obj.gas_limit
  93. if (!status)
  94. status = 3
  95. if (!update_time)
  96. update_time = utils.getTimestamp()
  97. var update_withdraw_params = [status, hash, nonce, update_time, gas_price, gas_limit, ret_obj.value, ret_obj.errorMsg ? ret_obj.errorMsg : '', withdraw_id]
  98. return new Promise((resolve) => {
  99. mysql.getMySqlInstance().getConnection(function (err, connection) {
  100. if (err) {
  101. logger.error('update_withdraw_task', err)
  102. logger.error('update_withdraw_task', update_withdraw_sql)
  103. resolve(null);
  104. return;
  105. }
  106. connection.query(
  107. update_withdraw_sql, update_withdraw_params,
  108. function selectCb(error, results) {
  109. if (error) {
  110. logger.error('update_withdraw_task', error, update_withdraw_sql, update_withdraw_params)
  111. resolve(null);
  112. return;
  113. }
  114. logger.log('update_withdraw_task ret=', error, results);
  115. //用完当前连接需要释放,归还给连接池
  116. connection.release();
  117. resolve({
  118. err: error,
  119. results: results
  120. });
  121. }
  122. );
  123. })
  124. })
  125. }
  126. function queryWithdrawInfoFromWithdrawId(withdrawId) {
  127. logger.log('queryWithdrawInfoFromWithdrawId', withdrawId)
  128. // 提币 id
  129. if (!withdrawId) {
  130. return {
  131. code: -1,
  132. error: 'withdraw_id cannot be empty.'
  133. }
  134. }
  135. var create_withdraw_sql = 'select * from withdraw_manage WHERE withdraw_id=?'
  136. var create_withdraw_params = [withdrawId]
  137. return new Promise((resolve) => {
  138. mysql.getMySqlInstance().getConnection(function (err, connection) {
  139. if (err) {
  140. logger.error('queryWithdrawInfoFromWithdrawId', err)
  141. logger.error('queryWithdrawInfoFromWithdrawId', create_withdraw_sql)
  142. resolve(null);
  143. return;
  144. }
  145. connection.query(
  146. create_withdraw_sql, create_withdraw_params,
  147. function selectCb(error, results) {
  148. if (error) {
  149. logger.error('queryWithdrawInfoFromWithdrawId', error, create_withdraw_sql, create_withdraw_params)
  150. resolve(null);
  151. return;
  152. }
  153. logger.log('queryWithdrawInfoFromWithdrawId ret=', error, results);
  154. //用完当前连接需要释放,归还给连接池
  155. connection.release();
  156. if (results && Array.isArray(results) && results.length > 0) {
  157. resolve(results[0]);
  158. } else {
  159. resolve(null);
  160. }
  161. }
  162. );
  163. })
  164. })
  165. }
  166. function getWidthdrawTotalFee() {
  167. var create_withdraw_sql = 'select * from withdraw_manage WHERE withdraw_status=? AND chain_id=? '
  168. var create_withdraw_params = [2, 56]
  169. return new Promise((resolve) => {
  170. mysql.getMySqlInstance().getConnection(function (err, connection) {
  171. if (err) {
  172. logger.error('getWidthdrawTotalFee', err)
  173. logger.error('getWidthdrawTotalFee', create_withdraw_sql)
  174. resolve(null);
  175. return;
  176. }
  177. connection.query(
  178. create_withdraw_sql, create_withdraw_params,
  179. function selectCb(error, results) {
  180. if (error) {
  181. logger.error('getWidthdrawTotalFee', error, create_withdraw_sql, create_withdraw_params)
  182. resolve(null);
  183. return;
  184. }
  185. logger.log('getWidthdrawTotalFee ret=', error, results);
  186. //用完当前连接需要释放,归还给连接池
  187. connection.release();
  188. if (results && Array.isArray(results) && results.length > 0) {
  189. resolve(results);
  190. } else {
  191. resolve(null);
  192. }
  193. }
  194. );
  195. })
  196. })
  197. }
  198. /**
  199. * 判断该任务是否存在
  200. * @param {*} withdrawId
  201. */
  202. function withdraw_id_exist(withdrawId) {
  203. logger.log('create_withdraw_task', withdrawId)
  204. // 提币 id
  205. if (!withdrawId) {
  206. return {
  207. code: -1,
  208. error: 'withdraw_id cannot be empty.'
  209. }
  210. }
  211. var create_withdraw_sql = 'select * from withdraw_manage WHERE withdraw_id=?'
  212. var create_withdraw_params = [withdrawId]
  213. return new Promise((resolve) => {
  214. mysql.getMySqlInstance().getConnection(function (err, connection) {
  215. if (err) {
  216. logger.error('withdraw_id_exist', err)
  217. logger.error('withdraw_id_exist', create_withdraw_sql)
  218. resolve(null);
  219. return;
  220. }
  221. connection.query(
  222. create_withdraw_sql, create_withdraw_params,
  223. function selectCb(error, results) {
  224. if (error) {
  225. logger.error('withdraw_id_exist', error, create_withdraw_sql, create_withdraw_params)
  226. resolve(null);
  227. return;
  228. }
  229. logger.log('withdraw_id_exist ret=', error, results);
  230. //用完当前连接需要释放,归还给连接池
  231. connection.release();
  232. if (results && Array.isArray(results) && results.length > 0) {
  233. resolve(true);
  234. } else {
  235. resolve(false);
  236. }
  237. }
  238. );
  239. })
  240. })
  241. }
  242. module.exports = {
  243. create_withdraw_task,
  244. update_withdraw_task,
  245. queryWithdrawInfoFromWithdrawId,
  246. getWidthdrawTotalFee,
  247. withdraw_id_exist
  248. }