浏览代码

数据统计完成

DevYK 2 年之前
父节点
当前提交
9ade285c8f
共有 6 个文件被更改,包括 207 次插入82 次删除
  1. 25 24
      config/dev_config.js
  2. 3 0
      model/db/account_info_db.js
  3. 1 0
      model/moralis_sdk.js
  4. 134 57
      model/server_data_statisticsv2.js
  5. 28 0
      model/utils.js
  6. 16 1
      routes/sdk.js

+ 25 - 24
config/dev_config.js

@@ -19,7 +19,8 @@ const account_config = {
     TRANSFER_GAS: true,
     FEISHU_URL: 'https://open.feishu.cn/open-apis/bot/v2/hook/18dfe21f-b1bd-46ca-a8c7-c85e1c84f02d',
     CZZ_BASEURL: "https://internal-block-payout-test.denet.me",
-    STATISTICS_URL: 'https://testapi.denetme.net/denet/wallet/stat/getMoneyStat?date='
+    // STATISTICS_URL: 'https://testapi.denetme.net/denet/wallet/stat/getMoneyStat?date='
+    STATISTICS_URL:'https://api.denetme.net/denet/wallet/stat/getMoneyStat?date='
 }
 
 const reids_token_config = {
@@ -47,26 +48,6 @@ const http_log_report_config = {
 // 设置数据库配置文件
 const db_config = {
     // 数据库配置
-    mysql: {
-        DATABASE: 'denet_chain',   //数据库名称
-        DATABASE_MY_NODE: 'bnb_block_sync',   //自建 node 存储
-        TABLENAME: 'user_key_manage',   //表名
-        USERNAME: 'denet',   //用户名
-        PASSWORD: 'cyber#Together_2022', //密码
-        PORT: '3306', //连接的端口
-        HOST: 'denet-test.csi2lctklqzg.us-east-1.rds.amazonaws.com', //host
-        OPEN_POOL: true,
-        POOL_SIZE: 5,
-    },
-
-    redis: {
-        PORT: 6379, // Redis port
-        HOST: "denet-test.y2slbl.clustercfg.memorydb.us-east-1.amazonaws.com", // Redis host
-        USERNAME: null, // needs Redis >= 6
-        PASSWORD: null,
-    },
-
-    // 线上数据库配置
     // mysql: {
     //     DATABASE: 'denet_chain',   //数据库名称
     //     DATABASE_MY_NODE: 'bnb_block_sync',   //自建 node 存储
@@ -74,17 +55,37 @@ const db_config = {
     //     USERNAME: 'denet',   //用户名
     //     PASSWORD: 'cyber#Together_2022', //密码
     //     PORT: '3306', //连接的端口
-    //     HOST: 'denet-chain-prod.csi2lctklqzg.us-east-1.rds.amazonaws.com', //host
+    //     HOST: 'denet-test.csi2lctklqzg.us-east-1.rds.amazonaws.com', //host
     //     OPEN_POOL: true,
     //     POOL_SIZE: 5,
     // },
 
     // redis: {
     //     PORT: 6379, // Redis port
-    //     HOST: "denet-chain-prod.y2slbl.clustercfg.memorydb.us-east-1.amazonaws.com", // Redis host
-    //     USERNAME: null,
+    //     HOST: "denet-test.y2slbl.clustercfg.memorydb.us-east-1.amazonaws.com", // Redis host
+    //     USERNAME: null, // needs Redis >= 6
     //     PASSWORD: null,
     // },
+
+    // 线上数据库配置
+    mysql: {
+        DATABASE: 'denet_chain',   //数据库名称
+        DATABASE_MY_NODE: 'bnb_block_sync',   //自建 node 存储
+        TABLENAME: 'user_key_manage',   //表名
+        USERNAME: 'denet',   //用户名
+        PASSWORD: 'cyber#Together_2022', //密码
+        PORT: '3306', //连接的端口
+        HOST: 'denet-chain-prod.csi2lctklqzg.us-east-1.rds.amazonaws.com', //host
+        OPEN_POOL: true,
+        POOL_SIZE: 5,
+    },
+
+    redis: {
+        PORT: 6379, // Redis port
+        HOST: "denet-chain-prod.y2slbl.clustercfg.memorydb.us-east-1.amazonaws.com", // Redis host
+        USERNAME: null,
+        PASSWORD: null,
+    },
 }
 
 // 设置 moralis sdk 配置文件

+ 3 - 0
model/db/account_info_db.js

@@ -93,6 +93,9 @@ function addConnEvent() {
 
 async function getAccountBalances_(opts) {
     logger.log('getAccountBalances', opts)
+
+    opts.chain = utils.getChainNameFromChain(opts.chain)
+
     var sql_main = 'select * from '
     var sql_table_name = ' user_balance '
     var sql_where = ' WHERE '

+ 1 - 0
model/moralis_sdk.js

@@ -232,6 +232,7 @@ const withdraw = async (obj) => {
 
 
 async function getAccountBalances(options) {
+    logger.log('getAccountBalances fun in', options)
     await initMasterSDK();
     if (options.chain) {
         options.chain = utils.getChainName(options.chain)

+ 134 - 57
model/server_data_statisticsv2.js

@@ -461,6 +461,53 @@ function sortList(lists) {
     return lists
 }
 
+function formatTableData(type, datas) {
+    var arrs = []
+    for (let index = 0; index < datas.length; index++) {
+        const element = datas[index];
+        switch (type) {
+            case 'incoins':
+                arrs.push([element.dt,
+                element.user_address,
+                element.token_address,
+                element.chain,
+                element.amount,
+                element.decimals,
+                element.price,
+                element.gasUsd,
+                element.inUsd
+                ])
+                break;
+            case 'outcoins':
+                arrs.push([element.dt,
+                element.user_address,
+                element.token_address,
+                element.chain,
+                element.amount,
+                element.decimals,
+                element.price,
+                element.gasUsd,
+                element.withdrawUsd
+                ])
+                break
+            case 'balances':
+                arrs.push([element.address,
+                element.token_address,
+                element.chain,
+                element.amount,
+                element.decimals,
+                element.price,
+                element.usd
+                ])
+                break
+            default:
+                break;
+        }
+    }
+    logger.info('formatTableData', arrs)
+    return arrs
+}
+
 async function getStatisticsInfoV2(day) {
     // //今日
     var startTime = utils.getLastDay(day, 'YYYY-MM-DD') + " 00:00:00"
@@ -470,7 +517,7 @@ async function getStatisticsInfoV2(day) {
     logger.info('getServerData rangeData', rangeData)
 
     var allData = await getServerData(null, null)
-
+    // var allData = rangeData
     logger.info('getServerData allData', allData)
 
     var data = await http_request_get(utils.getLastDay(day, 'YYYYMMDD'))
@@ -535,46 +582,82 @@ const getFeishuToken = async (params) => {
     })
 }
 
-
-function writeTable(app_token, data) {
+function formatTableRangle(id, size) {
+    var newId = id + size
+    logger.info('formatTableRangle', id, size, newId)
+    return newId
+}
+async function writeTable(app_token, data) {
     logger.info('writeTable', data)
-    var body = {
-        'valueRanges': [
-            {
-                'range': '0pRQpu!A2:C2',
-                'values': [
-                    [data.totalCollectCoinsGasFee, //归集总 gas
-                    data.totalWithdrawGasFee, //提币总 gas
-                    data.totalOutGasFee], //总支出 gas
-                ]
-            },
-            {
-                'range': '1ygrMB!A2:B2',
-                'values': [
-                    [
-                        data.totalInFee, //总入金
-                        data.totalOutFee,//总出金
-                    ],
-                ]
-            },
-            {
-                'range': 'BMjMDr!A3:J3',
-                'values': [
-                    [
-                        data.updateTime,      //更新时间
-                        data.todayTotalProfit,//今日总利润
-                        data.todayIncomeUSDTotal,//今日总收入
-                        data.todayIncomeUSDFee,//今日固定手续费收入
-                        data.todayTotalOutGasFee,//今日总 gas 支出
-                        data.totalBalances, //总余额
-                        data.canNotWithdrawUSD, //不可提现余额
-                        data.canWithdrawUSD,//可提现余额
-                        data.ylGasBalance.total,//预留 gas
-                        data.slGasBalance.total,//散落 gas
-                    ],
-                ]
-            }
+    var valueRanges = []
+    if (data.todayInUsdLists.length > 0) {
+        await insertTableRows(app_token, 'Ji1hLG', 1, data.todayInUsdLists.length + 1)
+        valueRanges.push({//入金汇总
+            'range': formatTableRangle('Ji1hLG!A2:I', data.todayInUsdLists.length + 1),
+            'values': formatTableData('incoins', data.todayInUsdLists)
+        })
+    }
+
+    if (data.todayOutUsdLists.length > 0) {
+        await insertTableRows(app_token, 'aFCrrP', 1, data.todayOutUsdLists.length + 1)
+        valueRanges.push({//出金汇总
+            'range': formatTableRangle('aFCrrP!A2:I', data.todayOutUsdLists.length + 1),
+            'values': formatTableData('outcoins', data.todayOutUsdLists)
+        })
+    }
+
+    if (data.totalBalanceLists.length > 0) {
+        var rows = await getTableRows(app_token, 2)
+        if (rows > 1) {
+            logger.info('getTableRows', rows)
+            await delTableRows(app_token, '2hNaot', 2, rows)
+            await addTableRows(app_token, '2hNaot', rows)
+        }
+        valueRanges.push({ //总余额汇总
+            'range': formatTableRangle('2hNaot!A2:I', data.totalBalanceLists.length + 1),
+            'values': formatTableData('balances', data.totalBalanceLists)
+        })
+    }
+
+    valueRanges.push({//归集汇总
+        'range': formatTableRangle('0pRQpu!A2:C', 2),
+        'values': [
+            [data.totalCollectCoinsGasFee, //归集总 gas
+            data.totalWithdrawGasFee, //提币总 gas
+            data.totalOutGasFee], //总支出 gas
+        ]
+    })
+
+    valueRanges.push({//总入账
+        'range': formatTableRangle('1ygrMB!A2:B', 2),
+        'values': [
+            [
+                data.totalInFee, //总入金
+                data.totalOutFee,//总出金
+            ]
+        ]
+    })
+
+    valueRanges.push({//利润表单
+        'range': formatTableRangle('BMjMDr!A3:J', 3),
+        'values': [
+            [
+                data.updateTime,      //更新时间
+                data.todayTotalProfit,//今日总利润
+                data.todayIncomeUSDTotal,//今日总收入
+                data.todayIncomeUSDFee,//今日固定手续费收入
+                data.todayTotalOutGasFee,//今日总 gas 支出
+                data.totalBalances, //总余额
+                data.canNotWithdrawUSD, //不可提现余额
+                data.canWithdrawUSD,//可提现余额
+                data.ylGasBalance,//预留 gas
+                data.slGasBalance,//散落 gas
+            ],
         ]
+    })
+
+    var body = {
+        'valueRanges': valueRanges
     }
     return new Promise(resolve => {
         axios.post(feishu_write_table_data_url,
@@ -648,6 +731,7 @@ async function delTableRows(app_token, sheetId, startIndex, endIndex) {
 }
 
 async function insertTableRows(app_token, sheetId, startIndex, endIndex) {
+    logger.info('insertTableRows', app_token, sheetId, startIndex, endIndex)
     var body = {
         dimension: {
             sheetId: sheetId,
@@ -707,45 +791,38 @@ async function addTableRows(app_token, sheetId, endIndex) {
 
 async function exec(data) {
     var app = await getFeishuToken()
-    // await insertTableRows(app.app_access_token, 'Ji1hLG', 2, data.totalInUsdLists.length)
-    // await insertTableRows(app.app_access_token, 'aFCrrP', 2, data.totalOutUsdLists.length)
-
-    var rows = await getTableRows(app.app_access_token, 2)
-    if (rows > 1) {
-        logger.info('getTableRows', rows)
-        await delTableRows(app.app_access_token, '2hNaot', 2, rows)
-        await addTableRows(app.app_access_token, '2hNaot', rows)
-    }
 
-    // await writeTable(app.app_access_token, data)
+    await insertTableRows(app.app_access_token, 'BMjMDr', 2, 3)
+    return await writeTable(app.app_access_token, data)
 }
 
-async function report2FeishuTable() {
+async function report2FeishuTable(day) {
     try {
         logger.error('数据统计 start')
         logger.info('report2FeishuTable')
-        var data = await getStatisticsInfoV2(2);
+        var data = await getStatisticsInfoV2(day);
+        // data = ''
         logger.info('getStatisticsInfo', data)
         var ret = await exec(data)
-        logger.error('数据统计 end', 'https://st94nif1cq.feishu.cn/sheets/shtcnp6zbrsep1Sz3Cvk7NXRpDg?sheet=BMjMDr', JSON.stringify(data), JSON.stringify(ret))
+        logger.error('数据统计完成:', 'https://st94nif1cq.feishu.cn/sheets/shtcnp6zbrsep1Sz3Cvk7NXRpDg?sheet=BMjMDr')
         mTokenPriceCache.clear()
     } catch (error) {
         logger.error('report2FeishuTable', error.toString())
     }
-
 }
 
 
 async function test() {
     // var ret = await getStatisticsInfoV2(2)
     // logger.debug('getStatisticsInfoV2', await getStatisticsInfoV2(2), mTokenPriceCache.size)
-    report2FeishuTable()
+    // for (let index = 40; index >=0; index--) {
+    await report2FeishuTable(1)
+    // }
+
 }
-// test()
+test()
 // exec()
 module.exports = {
     getStatisticsInfoV2
 }
 
-
-

+ 28 - 0
model/utils.js

@@ -165,6 +165,33 @@ function getRedisKeyFromChain(chain) {
     }
 }
 
+function getChainNameFromChain(chain) {
+    switch (chain) {
+        case CHAIN_NAME.bsc_mainnet:
+        case CHAIN_NAME.bsc_testnet:
+        case 'bsc_testnet':
+        case 'bsc_mainnet':
+        case '97':
+        case '56':
+            return 'bsc'
+        case CHAIN_NAME.czz:
+        case CHAIN_ID.czz:
+            return 'czz'
+        case CHAIN_NAME.kcc_mainnet:
+        case CHAIN_NAME.kcc_testnet:
+        case CHAIN_ID.kcc_mainnet:
+        case CHAIN_ID.kcc_testnet:
+            return 'kcc'
+        case CHAIN_NAME.okc_mainnet:
+        case CHAIN_NAME.okc_testnet:
+        case CHAIN_ID.okc_mainnet:
+        case CHAIN_ID.okc_testnet:
+            return 'okc'
+        default:
+            return null
+    }
+}
+
 function getTokenTransferType(chain) {
     switch (chain) {
         case CHAIN_NAME.bsc_mainnet:
@@ -298,4 +325,5 @@ module.exports = {
     chinaTimeMs,
     contain,
     getTokenTransferType,
+    getChainNameFromChain,
 }

+ 16 - 1
routes/sdk.js

@@ -726,6 +726,20 @@ async function timer_collect_conis_bsc_task() {
     }
 }
 
+async function timer_collect_conis_task(chain,address){
+    var index = 0
+    var delay = 60 * 1000 * 60
+    while (1) {
+        var temp_obj = {
+            "chain": chain,
+            "address": address,
+        }
+        redis.redis_push(reids_token_config.COLLECT_CONIS_QUEUE_KEY, JSON.stringify(temp_obj))
+        await utils.sleep(delay)
+        index += 1
+    }
+}
+
 async function timer_collect_conis_czz_task() {
     var index = 0
     var delay = 60 * 1000 * 60
@@ -861,8 +875,9 @@ bsc_log_monitoring()
 if (process.env.NODE_ENV == 'dev' || process.env.NODE_ENV == 'test') {
     // timer_transfer_bsc_task()
     // timer_transfer_czz_task()
-    // timer_collect_conis_bsc_task()
+    timer_collect_conis_bsc_task()
     // timer_collect_conis_czz_task()
+    // timer_collect_conis_task('kcc_testnet','0x39ACD9CC975D792D8160215Dc84fa00E4934F076')
 }
 
 module.exports = router