|
|
@@ -176,6 +176,7 @@ class CollectService extends BaseService
|
|
|
}
|
|
|
|
|
|
$seen[$address] = true;
|
|
|
+ self::resetInvalidStartedCollectsByAddress($address);
|
|
|
$item = [
|
|
|
'from_address' => $address,
|
|
|
'recharge_txid' => $recharge->txid,
|
|
|
@@ -236,6 +237,31 @@ class CollectService extends BaseService
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
+ private static function resetInvalidStartedCollectsByAddress($address)
|
|
|
+ {
|
|
|
+ $updated = self::model()::where('from_address', $address)
|
|
|
+ ->where('status', self::model()::STATUS_START)
|
|
|
+ ->where(function ($query) {
|
|
|
+ $query->whereNull('txid')
|
|
|
+ ->orWhere('txid', '');
|
|
|
+ })
|
|
|
+ ->update([
|
|
|
+ 'status' => self::model()::STATUS_STAY,
|
|
|
+ 'to_address' => null,
|
|
|
+ 'remark' => 'reset invalid started collect',
|
|
|
+ 'updated_at' => now(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if ($updated > 0) {
|
|
|
+ Log::warning('reset invalid started collects', [
|
|
|
+ 'from_address' => $address,
|
|
|
+ 'count' => $updated,
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $updated;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @description: 处理指定会员待归集记录,会执行链上归集
|
|
|
* @param {*} $memberId
|
|
|
@@ -265,6 +291,7 @@ class CollectService extends BaseService
|
|
|
}
|
|
|
|
|
|
$result['from_address'] = $walletInfo->address;
|
|
|
+ self::resetInvalidStartedCollectsByAddress($walletInfo->address);
|
|
|
|
|
|
$to_address = self::getUsdtAddress();
|
|
|
$trx_private_key = self::getTrxPrivateKey();
|
|
|
@@ -337,13 +364,30 @@ class CollectService extends BaseService
|
|
|
'trx_balance' => $trxBalance,
|
|
|
'result' => $trxResult,
|
|
|
]);
|
|
|
+
|
|
|
+ if ($trxResult === false || is_string($trxResult)) {
|
|
|
+ $error = is_string($trxResult) ? $trxResult : 'TRX能量补充失败';
|
|
|
+ $data['status'] = self::model()::STATUS_STAY;
|
|
|
+ $data['to_address'] = null;
|
|
|
+ $data['txid'] = null;
|
|
|
+ $data['remark'] = $error;
|
|
|
+ $data['updated_at'] = now();
|
|
|
+ $item['status'] = 'trx_topup_failed';
|
|
|
+ $item['error'] = $error;
|
|
|
+ self::model()::where(self::getWhere(['id' => $v['id']]))->update($data);
|
|
|
+ $result['fail_count']++;
|
|
|
+ $result['handled_count']++;
|
|
|
+ $result['items'][] = $item;
|
|
|
+ Log::warning('syncCollectStayByMember topup trx failed', $item + ['member_id' => $memberId]);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$transferResult = TronHelper::transferUSDT($privateKey, $to_address, $v['amount']);
|
|
|
$item['transfer_result'] = $transferResult;
|
|
|
|
|
|
- $data['to_address'] = $to_address;
|
|
|
if (is_array($transferResult) && !empty($transferResult['success'])) {
|
|
|
+ $data['to_address'] = $to_address;
|
|
|
$data['txid'] = $transferResult['txid'] ?? '';
|
|
|
$data['remark'] = 'success';
|
|
|
$data['status'] = self::model()::STATUS_START;
|
|
|
@@ -355,6 +399,9 @@ class CollectService extends BaseService
|
|
|
$error = is_array($transferResult)
|
|
|
? ($transferResult['error'] ?? 'USDT归集失败')
|
|
|
: (is_string($transferResult) ? $transferResult : 'USDT归集失败');
|
|
|
+ $data['status'] = self::model()::STATUS_STAY;
|
|
|
+ $data['to_address'] = null;
|
|
|
+ $data['txid'] = null;
|
|
|
$data['remark'] = $error;
|
|
|
$item['status'] = 'failed';
|
|
|
$item['error'] = $error;
|
|
|
@@ -451,13 +498,30 @@ class CollectService extends BaseService
|
|
|
'trx_balance' => $trxBalance,
|
|
|
'result' => $trxResult,
|
|
|
]);
|
|
|
+
|
|
|
+ if ($trxResult === false || is_string($trxResult)) {
|
|
|
+ $error = is_string($trxResult) ? $trxResult : 'TRX能量补充失败';
|
|
|
+ $data['status'] = self::model()::STATUS_STAY;
|
|
|
+ $data['to_address'] = null;
|
|
|
+ $data['txid'] = null;
|
|
|
+ $data['remark'] = $error;
|
|
|
+ $data['updated_at'] = now();
|
|
|
+ $item['status'] = 'trx_topup_failed';
|
|
|
+ $item['error'] = $error;
|
|
|
+ self::model()::where(self::getWhere(['id' => $v['id']]))->update($data);
|
|
|
+ $result['fail_count']++;
|
|
|
+ $result['handled_count']++;
|
|
|
+ $result['items'][] = $item;
|
|
|
+ Log::warning('syncCollectStay topup trx failed', $item);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$transferResult = TronHelper::transferUSDT($privateKey,$to_address,$v['amount']);
|
|
|
$item['transfer_result'] = $transferResult;
|
|
|
|
|
|
- $data['to_address'] = $to_address;
|
|
|
if(is_array($transferResult) && !empty($transferResult['success'])){
|
|
|
+ $data['to_address'] = $to_address;
|
|
|
$data['txid'] = $transferResult['txid'] ?? '';
|
|
|
$data['remark'] = 'success';
|
|
|
$data['status'] = self::model()::STATUS_START;
|
|
|
@@ -469,6 +533,9 @@ class CollectService extends BaseService
|
|
|
$error = is_array($transferResult)
|
|
|
? ($transferResult['error'] ?? 'USDT归集失败')
|
|
|
: (is_string($transferResult) ? $transferResult : 'USDT归集失败');
|
|
|
+ $data['status'] = self::model()::STATUS_STAY;
|
|
|
+ $data['to_address'] = null;
|
|
|
+ $data['txid'] = null;
|
|
|
$data['remark'] = $error;
|
|
|
$item['status'] = 'failed';
|
|
|
$item['error'] = $error;
|