Browse Source

归集存入 mysql

DevYK 2 years ago
parent
commit
d30ece4efb
4 changed files with 126 additions and 17 deletions
  1. 1 2
      app.js
  2. 64 0
      model/db/collect_coins_db.js
  3. 51 15
      model/moralis_sdk.js
  4. 10 0
      model/utils.js

+ 1 - 2
app.js

@@ -54,6 +54,5 @@ app.on('error', (err, ctx) => {
   log.error('server error ', err.toString())
 });
 
-
-log.error('app start');
+log.error('DeNet-Node-Server start');
 module.exports = app

+ 64 - 0
model/db/collect_coins_db.js

@@ -0,0 +1,64 @@
+const mysql = require("./mysql_db")
+const logger = require('../logger')
+var { db_config } = require('../../config/config.js')
+const utils = require('../utils.js')
+
+
+async function create_collect_coins_task(opts) {
+    logger.log('create_collect_coins_task', opts)
+
+    var balances = opts.addressBalances ? opts.addressBalances : ''
+
+    var transfers = opts.transfers ? opts.transfers : ''
+
+    var prestore_gas_free = opts.prestore_gas_fee ? opts.prestore_gas_fee : ''
+
+    var company_public_key = opts.company_public_key ? opts.company_public_key : ''
+
+    var total_gas_fee = opts.collectCoinsTotalGasFee ? opts.collectCoinsTotalGasFee : ''
+
+    var status = opts.status
+
+    var error_msg = opts.errMsg ? opts.errMsg : ''
+
+    var create_time = utils.getCurrentDate()
+
+    var update_time = utils.getCurrentDate()
+
+    var create_withdraw_sql = 'INSERT INTO collect_coins_manage (balances,transfers,prestore_gas_fee,company_public_key,total_gas_fee,status,create_time,update_time,error_msg)' +
+        'VALUES(?,?,?,?,?,?,?,?,?)'
+    var create_withdraw_params = [JSON.stringify(balances), JSON.stringify(transfers), JSON.stringify(prestore_gas_free), company_public_key, total_gas_fee, status, create_time, update_time, error_msg ? error_msg : '']
+
+    logger.log('create_collect_coins_task create_collect_coins_task_sql', create_withdraw_sql, create_withdraw_params);
+    return new Promise((resolve) => {
+        mysql.getMySqlInstance().getConnection(function (err, connection) {
+            if (err) {
+                logger.error('create_collect_coins_task', err)
+                logger.error('create_collect_coins_task_sql', create_withdraw_sql)
+                resolve(null);
+                return;
+            }
+            connection.query(
+                create_withdraw_sql, create_withdraw_params,
+                function selectCb(error, results) {
+                    if (error) {
+                        logger.error('create_collect_coins_task', error, create_withdraw_sql, create_withdraw_params)
+                        resolve(null);
+                        return;
+                    }
+                    logger.log('create_collect_coins_task ret=', error, results);
+                    //用完当前连接需要释放,归还给连接池
+                    connection.release();
+                    resolve({
+                        err: error,
+                        results: results.insertId
+                    });
+                }
+            );
+        })
+    })
+}
+
+module.exports = {
+    create_collect_coins_task,
+}

+ 51 - 15
model/moralis_sdk.js

@@ -9,6 +9,8 @@ const mysql = require("./db/mysql_db")
 const logger = require('./logger')
 const report = require("./report")  //导入 db.js
 const BigNumber = require('bignumber.js')
+const collect_coins_db = require('./db/collect_coins_db')
+
 /* Moralis init code */
 var serverUrl = moralis_config.SERVER_URL;
 var appId = moralis_config.APP_ID;
@@ -169,7 +171,7 @@ async function getAccountBalances(options) {
     if (options.chain) {
         options.chain = utils.getChainName(options.chain)
     }
-  
+
 
 
     //做 3次 重试,每次间隔 1s+=
@@ -180,10 +182,10 @@ async function getAccountBalances(options) {
     var interval = 500
     var result;
     var balance_opts = {
-        address:options.address,
-        chain:options.chain
+        address: options.address,
+        chain: options.chain
     }
-    logger.log('getAccountBalances :', options,balance_opts)
+    logger.log('getAccountBalances :', options, balance_opts)
     do {
         try {
             if (options.type == 'native') {
@@ -193,9 +195,8 @@ async function getAccountBalances(options) {
                 result = await Moralis.Web3API.account.getTokenBalances(balance_opts);
                 logger.log('getTokenBalances=', result);
             }
-            if(tryCount < 4)
-            {
-                logger.error('getBalances succeed:', JSON.stringify(balance_opts), " 已重试:" + tryCount +"次")
+            if (tryCount < 4) {
+                logger.error('getBalances succeed:', JSON.stringify(balance_opts), " 已重试:" + tryCount + "次")
             }
             break
         } catch (error) {
@@ -206,7 +207,7 @@ async function getAccountBalances(options) {
             tryCount -= 1;
             await utils.sleep(delay)
             delay += interval
-            logger.error('getBalances error:', JSON.stringify(balance_opts), "重试:" + tryCount +"次")
+            logger.error('getBalances error:', JSON.stringify(balance_opts), "重试:" + tryCount + "次")
         }
     } while (tryCount >= 1);
     return result
@@ -284,6 +285,7 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
                         receiver: receiver_info.user_address,
                         type: 'erc20',
                         address: obj.address,
+                        usdPrice: find_transfer_item.usdPrice
                     }
                     transfer_obj.push(obj_20)
                 }
@@ -338,6 +340,7 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
                 receiver: receiver_info.user_address,
                 type: 'native',
                 address: obj.address,
+                usdPrice: nativePriceItem.usdPrice
             }
             transfer_obj.push(obj_native)
         }
@@ -441,6 +444,7 @@ async function transfers(obj, my_account_all_coins, logParams) {
         var t_i = 0;
         var totalGasFee = 0;
         var collects = []
+        var collects_error = []
         for (let index = 0; index < my_account_all_coins.transfer_arrays.length; index++) {
             var ti = my_account_all_coins.transfer_arrays[index]
             logger.tlog('ti=', ti)
@@ -450,13 +454,11 @@ async function transfers(obj, my_account_all_coins, logParams) {
             if (ti.type == 'native') {
                 await updateNativeBalance(ti.amount, ti);
             }
-
             var ret = await start_collectCoins(ti)
             //更新 native 金额
             if (isTransferSucceed(ret)) {
                 logger.tlog('start_collectCoins  respose...', ret);
                 t_i += 1
-
                 collects.push(ret);
                 //缓存当前交易的 gas 费用
                 if (ret && ti.contractAddress) {
@@ -469,25 +471,59 @@ async function transfers(obj, my_account_all_coins, logParams) {
                     totalGasFee += parseInt(tr.totalGasFree);
                 }
             } else {
+                //缓存当前交易的 gas 费用
+                try {
+                    if (ret && ti.contractAddress) {
+                        var tr = getTransferGasFree('token', ret)
+                        // tr.totalGasFree
+                        totalGasFee += parseInt(tr.totalGasFree);
+                    } else {
+                        var tr = getTransferGasFree('native', ret)
+                        // tr.totalGasFree
+                        totalGasFee += parseInt(tr.totalGasFree);
+                    }
+                    try {
+                        collects_error.push(JSON.parse(ret).errMsg)
+                    } catch (error) { 
+                        logger.error('collects_error json parse error',ret)
+                    }
+                } catch (error) {
+                    logger.error('start_collectCoins 获取 gas fee=', error.toString(), JSON.stringify(ti));
+                }
                 logger.tlog('start_collectCoins  error=', ret);
-                logger.error('start_collectCoins 归集 error=', ret, ti.toString());
+                logger.error('start_collectCoins 归集 error=', ret, JSON.stringify(ti));
             };
         }
+        //日志埋点-归集全部所花费的 gas 费用
+        logParams.collectCoinsTotalGasFee = totalGasFee.toString();
         if (t_i == my_account_all_coins.transfer_arrays.length) {
-            //日志埋点-归集全部所花费的 gas 费用
-            logParams.collectCoinsTotalGasFee = totalGasFee.toString();
             logger.log('归集日志上报:', logParams);
             logParams.type = report.REPORT_TYPE.collect_coins
             //日志埋点-归集的响应
             logParams.results = collects
             var info = await queryCompanyInfoFromId(0);
             logParams.receiver_address_total_balance_after = await queryCollectBalance(info.user_address, obj.chain)
+            //归集入库
+            logParams.status = 0
+            try {
+                await collect_coins_db.create_collect_coins_task({ ...logParams })
+            } catch (error) {
+                logger.error('create_collect_coins_task', error.toString(), JSON.stringify(logParams))
+            }
             //日志埋点-日志上报
             report.logReport(logParams)
-
             return toJson(0, null, '所有币归集成功.');
         } else {
-            return toJson(-1, null, '归集失败.');
+            //归集入库
+            logParams.status = -1
+            try {
+                logger.error('归集失败 : ', JSON.stringify(collects_error))
+                logParams.errMsg = JSON.stringify(collects_error)
+                await collect_coins_db.create_collect_coins_task({ ...logParams })
+            } catch (error) {
+                logger.error('归集失败 error: ', error.toString())
+            }
+            return toJson(-1, null, JSON.stringify(collects_error));
         }
     } else {
         return toJson(-1, null, 'transfer conditions are not met.');

+ 10 - 0
model/utils.js

@@ -125,6 +125,15 @@ function getTimestamp() {
     return new Date().getTime()
 }
 
+function getCurrentDate() {
+    var now = new Date(getTimestamp()),
+        y = now.getFullYear(),
+        m = now.getMonth() + 1,
+        d = now.getDate();
+    return y + '-' + (m < 10 ? '0' + m : m) + '-' + (d < 10 ? '0' + d : d) + ' ' + now.toTimeString().substr(0, 8);
+}
+
+
 module.exports = {
     toJson,
     decryptPrivityKey,
@@ -137,4 +146,5 @@ module.exports = {
     decrypt,
     getTimestamp,
     getChainIdToName,
+    getCurrentDate,
 }