Browse Source

合并兑换记录

jason 6 months ago
parent
commit
fe15b79c36

+ 117 - 122
application/api/controller/Exchange.php

@@ -53,139 +53,134 @@ class Exchange extends Api
       //Rwa兑换
       public function submitWelfare(LedgerWalletModel $ledgerWalletModel, ProductWelfareRede $productWelfareRede)
       {
-            $ids = $this->request->post('ids'); // 代币ids
-            $coin_from_address = $this->request->post('coin_from_address'); // 代码转入地址
-            $usdt_from_address = $this->request->post('usdt_from_address'); // U转入地址
-            if (empty($ids) || empty($coin_from_address) || empty($usdt_from_address)) {
+          $ids = $this->request->post('ids'); // 代币ids
+          $coin_from_address = $this->request->post('coin_from_address'); // 代码转入地址
+          $usdt_from_address = $this->request->post('usdt_from_address'); // U转入地址
+          if (empty($ids) || empty($usdt_from_address)) {
+              $this->error(__('Parameter error'));
+          }
+          //检查区块链地址是否合法
+          if(!(isErc20AddressValid($usdt_from_address))){
+              $this->error(__('Invalid parameters'));
+          }
+          //福利兑换记录
+          $welfare_config = $productWelfareRede::get($ids);
+          if (!$welfare_config)  $this->error(__('Invalid parameters'));
+
+          $check_user = (new RwaExchangeRecordModel())->where('user_id', $this->auth->id)->count();
+          if($check_user >= 2){
+              $this->error('每人限制兑换两套,您已达上限');
+          }
+          $order_no = date('YmdHis') . rand(1000, 9999);
+          $inster_data[] = [
+              'order_no' => $order_no,
+              'user_id' => $this->auth->id,
+              'welfare_id' => $welfare_config['id'],
+              'product_id' => $welfare_config['product_id'],
+              'from_address_usdt' => $usdt_from_address,
+              'amount_usdt' => $welfare_config['usdt_num'],
+              'to_address' => $welfare_config['transfer_address'],
+              'create_time' => time()
+          ];
+          //有代币参与时
+          if($welfare_config->is_token >0){
+              if (empty($coin_from_address)) {
                   $this->error(__('Parameter error'));
-            }
-            //检查区块链地址是否合法
-           if(!(isErc20AddressValid($coin_from_address) && isErc20AddressValid($usdt_from_address))){
+              }
+              //检查区块链地址是否合法
+              if(!(isErc20AddressValid($coin_from_address))){
                   $this->error(__('Invalid parameters'));
-            }
-            //福利兑换记录
-            $welfare_config = $productWelfareRede::get($ids);
-            if (!$welfare_config)  $this->error(__('Invalid parameters'));
-            
-            $check_user = (new RwaExchangeRecordModel())->where('user_id', $this->auth->id)->where('status', 200)->count();
-            if($check_user >= 4){
-                  $this->error('每人限制兑换两套,您已达上限');
-            }
-            //有代币
-            $inster_data = [];
-            $order_no = date('YmdHis') . rand(1000, 9999);
-            if($welfare_config->is_token >0){
-                  $coin = $welfare_config->token_name;
-                  $BscApi = new BscApi($welfare_config->token_address);
-                  $result_coin = $BscApi->getTransactionRecordsByAddress($coin_from_address, $welfare_config->transfer_address, 49990000);
-                  if ($result_coin['code'] == 0) {
-                        $this->error($result_coin['msg']);
-                  }
-                  Log::info($result_coin, '代币所有转入记录');
-                  $coin_list = [];
-                  foreach ($result_coin['data'] as $value) {
-                        if ($value['amount'] == $welfare_config->token_num) {
-                        $coin_list[] = $value;
-                        }
-                  }
-                  if (empty($coin_list)) {
-                        $this->error('未识别到代币转入记录');
-                  }
-                  Log::info($coin_list, '代币精准转入记录');
-
-                  $coin_data = [];
-                  foreach ($coin_list as $item) {
-                        $check_info = (new RwaExchangeRecordModel())->where('tx_hash', $item['hash'])->find();
-                        if (empty($check_info)) {
-                        $coin_data = $item;
-                        break;
-                        }
+              }
+
+              $BscApi = new BscApi($welfare_config->token_address);
+              $result_coin = $BscApi->getTransactionRecordsByAddress($coin_from_address, $welfare_config->transfer_address, 49990000);
+              if ($result_coin['code'] == 0) {
+                  $this->error($result_coin['msg']);
+              }
+              Log::info($result_coin, '代币所有转入记录');
+              $coin_list = [];
+              foreach ($result_coin['data'] as $value) {
+                  if ($value['amount'] == $welfare_config->token_num) {
+                      $coin_list[] = $value;
                   }
-                  if (empty($coin_data)) {
-                        $this->error('未识别到新代币转入记录');
+              }
+              if (empty($coin_list)) {
+                  $this->error('未识别到代币转入记录');
+              }
+              Log::info($coin_list, '代币精准转入记录');
+
+              $coin_data = [];
+              foreach ($coin_list as $item) {
+                  $check_info = (new RwaExchangeRecordModel())->where('tx_hash_token', $item['hash'])->find();
+                  if (empty($check_info)) {
+                      $coin_data = $item;//获取未兑换过的代币转入记录
+                      break;
                   }
-                  Log::info($coin_list, '代币可用转入记录');
-                  $inster_data[] = [
-                        'order_no' => $order_no,
-                        'tx_hash' => $coin_data['hash'],
-                        'user_id' => $this->auth->id,
-                        'symbol'  => $coin,
-                        'amount' => $coin_data['amount'],
-                        'product_id' => $welfare_config['product_id'],
-                        'from_address' => $coin_data['from'],
-                        'to_address' => $coin_data['to'],
-                        'welfare_id' => $ids,
-                        'status' => 200,
-                        'create_time' => time(),
-                  ];
+              }
+              if (empty($coin_data)) {
+                  $this->error('未识别到新代币转入记录');
+              }
+
+              Log::info($coin_list, '代币可用转入记录');
+
+              //拼装代币转入记录
+              $inster_data['token_name'] = $welfare_config->token_name;
+              $inster_data['from_address_token'] = $coin_data['from'];
+              $inster_data['amount_token'] = $coin_data['amount'];
+              $inster_data['tx_hash_token'] = $coin_data['hash'];
             }
 
-            $BscApi = new BscApi($welfare_config->token_address);
-            $result_usdt = $BscApi->getTransactionRecordsByAddress($usdt_from_address, $welfare_config->transfer_address, 49990000);
-            if ($result_usdt['code'] == 0) {
-                  $this->error($result_usdt['msg']);
-            }
-            Log::info($result_usdt, 'USDT所有转入记录');
-            $usdt_list = [];
-            foreach ($result_usdt['data'] as $value) {
-                  if ($value['amount'] == $welfare_config->token_num) {
+          //USDT转入记录
+          $BscApi = new BscApi('0x55d398326f99059ff775485246999027b3197955');
+          $result_usdt = $BscApi->getTransactionRecordsByAddress($usdt_from_address, $welfare_config->transfer_address, 49990000);
+          if ($result_usdt['code'] == 0) {
+              $this->error($result_usdt['msg']);
+          }
+          Log::info($result_usdt, 'USDT所有转入记录');
+          $usdt_list = [];
+          foreach ($result_usdt['data'] as $value) {
+              if ($value['amount'] == $welfare_config->usdt_num) {
                   $usdt_list[] = $value;
-                  }
-            }
-            if (empty($usdt_list)) {
-                  $this->error('未识别到USDT转入记录');
-            }
-            Log::info($usdt_list, 'USDT精准转入记录');
-
-            $usdt_data = [];
-            foreach ($usdt_list as $item) {
-                  $check_info = (new RwaExchangeRecordModel())->where('tx_hash', $item['hash'])->find();
-                  if (empty($check_info)) {
+              }
+          }
+          if (empty($usdt_list)) {
+              $this->error('未识别到USDT转入记录');
+          }
+          Log::info($usdt_list, 'USDT精准转入记录');
+
+          $usdt_data = [];
+          foreach ($usdt_list as $item) {
+              $check_info = (new RwaExchangeRecordModel())->where('tx_hash_usdt', $item['hash'])->find();
+              if (empty($check_info)) {
                   $usdt_data = $item;
                   break;
-                  }
-            }
-            if (empty($usdt_data)) {
-                  $this->error('未识别到新USDT转入记录');
-            }
-            Log::info($usdt_list, 'USDT可用入记录');
-           
-            //记录
-            $inster_data[] = [
-                  'order_no' => $order_no,
-                  'tx_hash' => $usdt_data['hash'],
-                  'user_id' => $this->auth->id,
-                  'symbol' => 'USDT',
-                  'amount' => $usdt_data['amount'],
-                  'product_id' => $welfare_config['product_id'],
-                  'from_address' => $usdt_data['from'],
-                  'to_address' => $usdt_data['to'],
-                  'welfare_id' => $ids,
-                  'status' => 200,
-                  'create_time' => time()
-            ];
-            Log::info($inster_data, '插入数据');
-            
-            try {
-                  Db::startTrans();
-                  Db::name('rwa_exchange_record')->fetchSql(false)->insertAll($inster_data);
-                  //添加标记茶宝记录
-                  $ledgerWalletModel->changeWalletAccount($this->auth->id, Asset::FROZEN, $usdt_data['amount'], LedgerFrozenChangeModel::RwaExchangeRecord, 0);
-                  
-                  //发放产品奖励
-                  $rs =WelfareLoginc::setUserWelfareProduct($this->auth->id, $welfare_config['product_id'], $order_no, ProductOrder::RwaExchange);
-                  Db::commit();
-                  $this->success('ok', $order_no);
-            } catch (Exception $e) {
-                  Db::rollback();
-                  $this->error($e->getMessage(), null, $e->getCode());
-            }
+              }
+          }
+          if (empty($usdt_data)) {
+              $this->error('未识别到新USDT转入记录');
+          }
+          Log::info($usdt_list, 'USDT可用入记录');
+
+          //记录
+          $inster_data['tx_hash_usdt'] = $usdt_data['hash'];
+          Log::info($inster_data, '插入数据');
+
+          try {
+              Db::startTrans();
+              Db::name('rwa_exchange_record')->fetchSql(false)->insertAll($inster_data);
+              //添加标记茶宝记录
+              $ledgerWalletModel->changeWalletAccount($this->auth->id, Asset::FROZEN, $usdt_data['amount'], LedgerFrozenChangeModel::RwaExchangeRecord, 0);
+
+              //发放产品奖励
+              $rs =WelfareLoginc::setUserWelfareProduct($this->auth->id, $welfare_config['product_id'], $order_no, ProductOrder::RwaExchange);
+              Db::commit();
+              $this->success('ok', $order_no);
+          } catch (Exception $e) {
+              Db::rollback();
+              $this->error($e->getMessage(), null, $e->getCode());
+          }
       }
 
-
-      //
-
-
       //Teac兑换列表
       public function getTeacList(ProductLists $productLists){
              

+ 47 - 0
application/common/controller/debug.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace app\common\controller;
+
+use think\Db;
+
+class debug
+{
+    public function rest_exchange()
+    {
+        $orders = Db::name('rwa_exchange_record_1')->group('order_no')->select();
+        $i = 0;
+        foreach ($orders as $order) {
+            $order_no = $order['order_no'];
+            $order_list = Db::name('rwa_exchange_record_1')->where('order_no', $order_no)->select();
+            $usdt_info = $token_info = [];
+            foreach ($order_list as $item) {
+                if ($order['symbol'] == 'USDT') {
+                    $usdt_info = $item;
+                } else {
+                    $token_info = $item;
+                }
+            }
+
+            $inster_data[] = [
+                'order_no' => $order_no,
+                'user_id' => $order['user_id'],
+                'welfare_id' => 1,
+                'product_id' => $order['product_id'],
+                'tx_hash_usdt' => $usdt_info['hash'],
+                'from_address_usdt' => $usdt_info['from_address'],
+                'amount_usdt' => $usdt_info['amount'],
+                'token_name' => $token_info['symbol'],
+                'from_address_token' => $token_info['from_address'],
+                'amount_token' => $token_info['amount'],
+                'tx_hash_token' => $token_info['hash'],
+                'to_address' => $order['to_address'],
+                'create_time' => time()
+            ];
+
+            Db::name('rwa_exchange_record_back')->insert($inster_data);
+            dump('完成:' . $order_no);
+            $i++;
+        }
+        dump('共完成:' . $i . '条');
+    }
+}

+ 1 - 1
application/common/logic/BscApi.php

@@ -23,7 +23,7 @@ class BscApi
 
     protected $bsc_api_key = 'VTCKIP346DCRWB6JNS4KDANUJJEQN9VAKW';
 
-    protected $contract_address = '0xcf3271b1be72f834e4dd35b9d558d583894473f1';//交易币种的合约地址,默认为usdt的:0x55d398326f99059ff775485246999027b3197955,测试合约:0xcf3271b1be72f834e4dd35b9d558d583894473f1
+    protected $contract_address = '0x55d398326f99059ff775485246999027b3197955';//交易币种的合约地址,默认为usdt的:0x55d398326f99059ff775485246999027b3197955,测试合约:0xcf3271b1be72f834e4dd35b9d558d583894473f1
     /**
      * value的放大比例 固定为: 10的18次方
      * @var int