withdraw_db.js 9.6 KB

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