|
|
@@ -589,6 +589,7 @@ class MemberService extends BaseService
|
|
|
// 可提金额或手续费验证
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
+ RedisService::set($cacheKey . '_lock', date('Y-m-d H:i:s'), rand(3,5));
|
|
|
if ($coinType == 1) {
|
|
|
$maxUsdtRate = ConfigService::make()->getConfigByCode('usdt_withdraw_max_rate', 0);
|
|
|
$withdrawTotal = BalanceLogService::make()->getCountByType($userId, 2, 1, 0);
|
|
|
@@ -598,6 +599,7 @@ class MemberService extends BaseService
|
|
|
DB::rollBack();
|
|
|
$this->error = 2026; // 可提金额超出
|
|
|
$this->errorData = ['money' => moneyFormat($maxWithdrawMoney - $withdrawTotal, 2)];
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -606,6 +608,7 @@ class MemberService extends BaseService
|
|
|
if (!$this->model->where(['id' => $userId])->update($updateData)) {
|
|
|
DB::rollBack();
|
|
|
$this->error = 2033; // 提现处理失败
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -632,6 +635,7 @@ class MemberService extends BaseService
|
|
|
if (!BalanceLogModel::insertGetId($log)) {
|
|
|
DB::rollBack();
|
|
|
$this->error = 2033;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -654,6 +658,7 @@ class MemberService extends BaseService
|
|
|
if (!AccountLogModel::insertGetId($data)) {
|
|
|
DB::rollBack();
|
|
|
$this->error = 2033;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -669,6 +674,7 @@ class MemberService extends BaseService
|
|
|
DB::rollBack();
|
|
|
$this->error = 2032; // 手续费不足
|
|
|
$this->errorData = ['money' => $sbtFee];
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -677,6 +683,7 @@ class MemberService extends BaseService
|
|
|
DB::rollBack();
|
|
|
$this->error = 2026; // 手续费不足
|
|
|
$this->errorData = ['money' => $userProfit];
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -685,6 +692,7 @@ class MemberService extends BaseService
|
|
|
if (!$this->model->where(['id' => $userId])->update($updateData)) {
|
|
|
DB::rollBack();
|
|
|
$this->error = 2033; // 提现处理失败
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -712,6 +720,7 @@ class MemberService extends BaseService
|
|
|
if (!BalanceLogModel::insertGetId($log)) {
|
|
|
DB::rollBack();
|
|
|
$this->error = 2033;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -734,6 +743,7 @@ class MemberService extends BaseService
|
|
|
if (!AccountLogModel::insertGetId($data)) {
|
|
|
DB::rollBack();
|
|
|
$this->error = 2033;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -757,6 +767,7 @@ class MemberService extends BaseService
|
|
|
if (!AccountLogModel::insertGetId($data)) {
|
|
|
DB::rollBack();
|
|
|
$this->error = 2033;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
@@ -764,17 +775,181 @@ class MemberService extends BaseService
|
|
|
// 成功
|
|
|
DB::commit();
|
|
|
RedisService::keyDel("caches:balanceLog:total*");
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
return $this->getInfo($userId, 3, true);
|
|
|
}
|
|
|
} catch (\Exception $exception) {
|
|
|
DB::rollBack();
|
|
|
$this->errorData = ['error' => $exception->getMessage()];
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
$this->error = 2028;
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 闪兑
|
|
|
+ * @param $userId 用户
|
|
|
+ * @param $params 参数:money-闪兑金额
|
|
|
+ * @return array|false|mixed
|
|
|
+ */
|
|
|
+ public function exchange($userId, $params)
|
|
|
+ {
|
|
|
+ $money = isset($params['money']) ? floatval($params['money']) : 0;
|
|
|
+ $coinType = 2;
|
|
|
+ if ($money <= 0) {
|
|
|
+ $this->error = 2101;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $cacheKey = "caches:exchange:{$userId}_{$coinType}";
|
|
|
+ if (RedisService::get($cacheKey . '_lock')) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $info = $this->model->where(['id' => $userId, 'mark' => 1])->first();
|
|
|
+ if (empty($info)) {
|
|
|
+ $this->error = 2016;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $status = isset($info['status']) ? $info['status'] : 0;
|
|
|
+ $userProfit = isset($info['profit']) ? floatval($info['profit']) : 0;
|
|
|
+ $userSbt = isset($info['sbt']) ? floatval($info['sbt']) : 0;
|
|
|
+ $userUsdt = isset($info['usdt']) ? floatval($info['usdt']) : 0;
|
|
|
+ if ($status != 1) {
|
|
|
+ $this->error = 2015; // 冻结
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 闪兑验证
|
|
|
+ $sbtLimit = ConfigService::make()->getConfigByCode('sbt_exchange_limit', 100);
|
|
|
+ $sbtPrice = PriceLogService::make()->getSbtPrice();
|
|
|
+ $sbtLimit = round($sbtLimit/$sbtPrice, 2);
|
|
|
+ $sbtLimit = $sbtLimit>0? $sbtLimit : 0;
|
|
|
+ if($sbtLimit>0 && $sbtLimit < $userSbt){
|
|
|
+ $this->error = lang(2102,['money'=> $sbtLimit]);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 可提金额或手续费验证
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ RedisService::set($cacheKey . '_lock',date('Y-m-d H:i:s'), rand(3,5));
|
|
|
+ // TODO SBT 闪兑 USDT
|
|
|
+ if ($coinType == 2) {
|
|
|
+ // 手续费
|
|
|
+ $exchangeFeeRate = ConfigService::make()->getConfigByCode('exchange_fee_rate', 0);
|
|
|
+ $exchangeFeeRate = $exchangeFeeRate>0 && $exchangeFeeRate<100? floatval($exchangeFeeRate) : 0;
|
|
|
+
|
|
|
+ // 闪兑金额
|
|
|
+ $sbtUsdt = moneyFormat($money * $sbtPrice, 2); // 闪兑USDT金额
|
|
|
+ $feeUsdt = round($sbtUsdt * $exchangeFeeRate/100, 2);
|
|
|
+ $actualUsdt = moneyFormat($sbtUsdt - $feeUsdt, 2);
|
|
|
+
|
|
|
+ // 闪兑入账收益账户处理
|
|
|
+ $updateData = [
|
|
|
+ 'profit' => DB::raw("profit + {$actualUsdt}"),
|
|
|
+ 'sbt' => DB::raw("sbt - {$money}"),
|
|
|
+ 'update_time' => time()
|
|
|
+ ];
|
|
|
+ if (!$this->model->where(['id' => $userId])->update($updateData)) {
|
|
|
+ DB::rollBack();
|
|
|
+ $this->error = 2103;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // SBT扣除账单
|
|
|
+ $orderNo = get_order_num('SE');
|
|
|
+ $data = [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'order_no' => $orderNo,
|
|
|
+ 'type' => 2,
|
|
|
+ 'user_type' => 1,
|
|
|
+ 'coin_type' => 2,
|
|
|
+ 'money' => -$money,
|
|
|
+ 'before_money' => $userSbt,
|
|
|
+ 'create_time' => time(),
|
|
|
+ 'action_ip' => get_client_ip(),
|
|
|
+ 'remark' => 'SBT闪兑',
|
|
|
+ 'status' => 1,
|
|
|
+ 'mark' => 1,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if (!AccountLogModel::insertGetId($data)) {
|
|
|
+ DB::rollBack();
|
|
|
+ $this->error = 2103;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 到账USDT收益账单
|
|
|
+ $data = [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'order_no' => $orderNo,
|
|
|
+ 'type' => 2,
|
|
|
+ 'user_type' => 1,
|
|
|
+ 'coin_type' => 3,
|
|
|
+ 'money' => $actualUsdt,
|
|
|
+ 'before_money' => $userProfit,
|
|
|
+ 'create_time' => time(),
|
|
|
+ 'action_ip' => get_client_ip(),
|
|
|
+ 'remark' => 'SBT闪兑到账',
|
|
|
+ 'status' => 1,
|
|
|
+ 'mark' => 1,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if (!AccountLogModel::insertGetId($data)) {
|
|
|
+ DB::rollBack();
|
|
|
+ $this->error = 2103;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 闪兑手续费账单
|
|
|
+ $data = [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'order_no' => $orderNo,
|
|
|
+ 'type' => 18,
|
|
|
+ 'user_type' => 1,
|
|
|
+ 'coin_type' => 3,
|
|
|
+ 'money' => $feeUsdt,
|
|
|
+ 'before_money' => moneyFormat($userProfit + $actualUsdt,2),
|
|
|
+ 'create_time' => time(),
|
|
|
+ 'action_ip' => get_client_ip(),
|
|
|
+ 'remark' => 'SBT闪兑手续费',
|
|
|
+ 'status' => 1,
|
|
|
+ 'mark' => 1,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if (!AccountLogModel::insertGetId($data)) {
|
|
|
+ DB::rollBack();
|
|
|
+ $this->error = 2103;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 成功
|
|
|
+ DB::commit();
|
|
|
+ $this->error = 2105;
|
|
|
+ return $this->getInfo($userId, 3, true);
|
|
|
+ }else{
|
|
|
+ DB::rollBack();
|
|
|
+ $this->error = 1031;
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } catch (\Exception $exception) {
|
|
|
+ DB::rollBack();
|
|
|
+ $this->errorData = ['error' => $exception->getMessage()];
|
|
|
+ RedisService::clear($cacheKey . '_lock');
|
|
|
+ $this->error = 2104;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 更新用户等级
|
|
|
* @param $userId 需要更新等级用户ID
|
|
|
*/
|