seven 1 deň pred
rodič
commit
8720ab8e74

+ 1 - 0
app/Constants/GameplayRuleEnum.php

@@ -131,6 +131,7 @@ class GameplayRuleEnum
     {
         // 获取所有玩法
         $allRules = array_merge(...array_values(self::$RULES));
+        
 
         // 玩法正则(防止玩法里有特殊符号出错)
         $rulesPattern = implode('|', array_map('preg_quote', $allRules));

+ 4 - 2
app/Http/Controllers/admin/Wallet.php

@@ -15,7 +15,7 @@ use Illuminate\Validation\ValidationException;
 use App\Models\Wallet as WalletModel;
 use App\Models\Withdraw;
 
-use App\Services\GameplayRuleService;
+use App\Services\BetService;
 
 class Wallet extends Controller
 {
@@ -237,6 +237,7 @@ class Wallet extends Controller
     public function test()
     {
         $input = request()->get('input','');
+        // var_dump($input);
         // $contractAddress = TronHelper::getContractAddress('USDT');
         // $result = TronHelper::getTrc20Balance('TTJ1vH18Q4K3seDcjD4912KDHHzm327rtL',$contractAddress);
         // $result = TronHelper::getBalance('TDeGNiweUm86JBJHQ7kXwQ8XQKtrKorHad','USDT');
@@ -246,7 +247,8 @@ class Wallet extends Controller
         // $result = TronHelper::getTrc20UsdtRecharges('TGQaMxtyWeGowy8xqwh98JNNLtc77nzZ8M');
         // $result = TronHelper::getTransactionConfirmations('06407fa9a2ba51c88f1ed01c2296f0069bf305477d3847d41bc3f35cf9190f74');
         // var_dump($result);
-        $result = GameplayRuleService::bettingRuleVerify('7630843396');
+        $memberId = '6325700519';
+        $result = BetService::bet($memberId,$input);
         var_dump($result);
         // RechargeService::handleRechargeConfirmation('45f313ccc3a2f4113f6cc9a7511e8b5096daa1de76cb57397e152a491c17249f');
         // WalletService::getUserWallet('1777');

+ 69 - 0
app/Models/Bet.php

@@ -0,0 +1,69 @@
+<?php
+
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Foundation\Auth\User as Authenticatable;
+use Illuminate\Notifications\Notifiable;
+use Laravel\Sanctum\HasApiTokens;
+
+/**
+ * Bet
+ * @mixin Builder
+ * @method static Builder|static where($column, $operator = null, $value = null, $boolean = 'and')
+ */
+class Bet extends Authenticatable
+{
+    use HasApiTokens, Notifiable;
+    protected $table = 'bets';
+    // protected $hidden = ['created_at', 'updated_at'];
+    protected $fillable = ['issue_no', 'keywords', 'amount' ,'odds' ,'status' ,'profit' ,'issue_id' ,'member_id' ,'user_id'];
+
+    const STATUS_STAY = 1;
+    const STATUS_SETTLED = 2;
+    const STATUS_CANCEL = 3;
+
+    public static $STATUS = [
+        1 => '待结算',
+        2 => '已结算',
+        3 => '取消',
+    ];
+
+    public static function getStatus($val = -1)
+    {
+        $array = self::$STATUS;
+        if($val < 0){
+            $arr = [];
+            foreach($array as $k => $v){
+                $item = [];
+                $item['id'] = $k;
+                $item['title'] = $v;
+                $arr[] = $item;
+            }
+            return $arr;
+        }else{
+            return $array[$val];
+        }
+    }
+
+    protected function getCreatedAtAttribute($value)
+    {
+        return \Carbon\Carbon::parse($value)->setTimezone('Asia/Shanghai')->format('Y-m-d H:i:s');
+    }
+
+    protected function getUpdatedAtAttribute($value)
+    {
+        return \Carbon\Carbon::parse($value)->setTimezone('Asia/Shanghai')->format('Y-m-d H:i:s');
+    }
+
+    // public function children()
+    // {
+    //     return $this->hasMany(Menu::class, 'parent_id');
+    // }
+
+    // public function parent()
+    // {
+    //     return $this->belongsTo(Menu::class, 'parent_id');
+    // }
+}

+ 70 - 0
app/Models/Issue.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Foundation\Auth\User as Authenticatable;
+use Illuminate\Notifications\Notifiable;
+use Laravel\Sanctum\HasApiTokens;
+
+/**
+ * Bet
+ * @mixin Builder
+ * @method static Builder|static where($column, $operator = null, $value = null, $boolean = 'and')
+ */
+class Issue extends Authenticatable
+{
+    use HasApiTokens, Notifiable;
+    protected $table = 'issues';
+    // protected $hidden = ['created_at', 'updated_at'];
+    protected $fillable = ['issue_no', 'start_time', 'end_time' ,'winning_numbers' ,'status' ];
+
+    const STATUS_DRAFT = 0;
+    const STATUS_BETTING = 1;
+    const STATUS_CLOSE = 2;
+    const STATUS_DRAW = 3;
+
+    public static $STATUS = [
+        0 => '草稿',
+        1 => '投注中',
+        2 => '封盘',
+        3 => '开奖',
+    ];
+
+    public static function getStatus($val = -1)
+    {
+        $array = self::$STATUS;
+        if($val < 0){
+            $arr = [];
+            foreach($array as $k => $v){
+                $item = [];
+                $item['id'] = $k;
+                $item['title'] = $v;
+                $arr[] = $item;
+            }
+            return $arr;
+        }else{
+            return $array[$val];
+        }
+    }
+
+    protected function getCreatedAtAttribute($value)
+    {
+        return \Carbon\Carbon::parse($value)->setTimezone('Asia/Shanghai')->format('Y-m-d H:i:s');
+    }
+
+    protected function getUpdatedAtAttribute($value)
+    {
+        return \Carbon\Carbon::parse($value)->setTimezone('Asia/Shanghai')->format('Y-m-d H:i:s');
+    }
+
+    // public function children()
+    // {
+    //     return $this->hasMany(Menu::class, 'parent_id');
+    // }
+
+    // public function parent()
+    // {
+    //     return $this->belongsTo(Menu::class, 'parent_id');
+    // }
+}

+ 171 - 0
app/Services/BetService.php

@@ -0,0 +1,171 @@
+<?php
+
+
+namespace App\Services;
+
+use App\Services\BaseService;
+use App\Models\Bet;
+use App\Models\Config;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Log;
+
+use App\Services\GameplayRuleService;
+use App\Services\WalletService;
+use App\Services\IssueService;
+
+/**
+ * 投注
+*/
+class BetService extends BaseService 
+{
+    /**
+     * @description: 模型
+     * @return {string}
+     */    
+    public static function model() :string
+    {
+        return Bet::class;
+    }
+
+    /**
+     * @description: 枚举
+     * @return {*}
+     */    
+    public static function enum() :string
+    {
+        return '';
+    }
+
+    /**
+     * @description: 获取查询条件
+     * @param {array} $search 查询内容
+     * @return {array}
+     */    
+    public static function getWhere(array $search = []) :array
+    {
+        $where = [];
+        if(isset($search['issue_no']) && !empty($search['issue_no'])){
+            $where[] = ['issue_no', '=', $search['issue_no']];
+        }
+        if(isset($search['member_id']) && !empty($search['member_id'])){
+            $where[] = ['member_id', '=', $search['member_id']];
+        }
+        if(isset($search['issue_id']) && !empty($search['issue_id'])){
+            $where[] = ['issue_id', '=', $search['issue_id']];
+        }
+        if(isset($search['id']) && !empty($search['id'])){
+            $where[] = ['id', '=', $search['id']];
+        }
+        if(isset($search['user_id']) && !empty($search['user_id'])){
+            $where[] = ['user_id', '=', $search['user_id']];
+        }
+        if(isset($search['status']) && !empty($search['status'])){
+            $where[] = ['status', '=', $search['status']];
+        }
+        return $where;
+    }
+
+     /**
+     * @description: 查询单条数据
+     * @param array $search
+     * @return \App\Models\Coin|null
+     */
+    public static function findOne(array $search): ?Bet
+    {
+        return self::model()::where(self::getWhere($search))->first();
+    }
+
+    /**
+     * @description: 查询所有数据
+     * @param array $search
+     * @return \Illuminate\Database\Eloquent\Collection
+     */
+    public static function findAll(array $search = [])
+    {
+        return self::model()::where(self::getWhere($search))->get();
+    }
+
+    /**
+     * @description: 分页查询
+     * @param array $search
+     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
+     */
+    public static function paginate(array $search = [])
+    {
+        $limit = isset($search['limit'])?$search['limit']:15;
+        $paginator = self::model()::where(self::getWhere($search))->paginate($limit);
+        return ['total' => $paginator->total(), 'data' => $paginator->items()];
+    }
+
+    /**
+     * @description: 投注操作
+     * @param {string} $memberId
+     * @param {string} $input
+     * @return {*}
+     */    
+    public static function bet(string $memberId,string $input ,$messageId = 0)
+    {
+        $msg = [];
+        $msg['chat_id'] = $memberId;
+
+        // 钱包生成
+        // $walletInfo = WalletService::getUserWallet($memberId);
+        
+
+        // 分解投注的内容
+        $betResult = GameplayRuleService::bettingRuleVerify($input);
+
+        $serviceAccount = Config::where('field', 'service_account')->first()->val;
+        if($betResult == null){
+            $text = "消息格式错误!\n";
+            $text .= "任何疑问都可以联系唯一财务:@{$serviceAccount}";
+            $msg['text'] = $text;
+            if($memberId){
+                $msg['message_id'] = $messageId;
+            }
+            return $msg;
+        }
+
+        $keywords = $betResult['rule'];  // 玩法
+        $amount = $betResult['amount'];    // 投注金额
+
+        $GameplayRuleInfo = GameplayRuleService::getGameplayRules($keywords);
+        if($GameplayRuleInfo == null){
+            $text = "玩法未配置!\n";
+            $text .= "任何疑问都可以联系唯一财务:@{$serviceAccount}";
+            $msg['text'] = $text;
+            if($memberId){
+                $msg['message_id'] = $messageId;
+            }
+            return $msg;
+        }
+
+
+        if(!is_numeric($amount) || $amount <= 0){
+            $text = "投注金额格式不正确!\n";
+            $text .= "任何疑问都可以联系唯一财务:@{$serviceAccount}";
+            $msg['text'] = $text;
+            if($memberId){
+                $msg['message_id'] = $messageId;
+            }
+            return $msg;
+        }
+
+
+        // 获取用户余额
+        $walletInfo = WalletService::findOne(['member_id' => $memberId]);
+        $balance = $walletInfo['available_balance']; 
+
+        // 余额计算
+        if($balance < $amount){
+            $text = "余额不足,本次下注无效!\n";
+            $msg['text'] = $text;
+            if($memberId){
+                $msg['message_id'] = $messageId;
+            }
+            return $msg;
+        }
+    }
+}

+ 89 - 0
app/Services/IssueService.php

@@ -0,0 +1,89 @@
+<?php
+
+
+namespace App\Services;
+
+use App\Services\BaseService;
+use App\Models\Issue;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Log;
+
+/**
+ * 投注
+*/
+class IssueService extends BaseService 
+{
+    /**
+     * @description: 模型
+     * @return {string}
+     */    
+    public static function model() :string
+    {
+        return Issue::class;
+    }
+
+    /**
+     * @description: 枚举
+     * @return {*}
+     */    
+    public static function enum() :string
+    {
+        return '';
+    }
+
+    /**
+     * @description: 获取查询条件
+     * @param {array} $search 查询内容
+     * @return {array}
+     */    
+    public static function getWhere(array $search = []) :array
+    {
+        $where = [];
+        if(isset($search['issue_no']) && !empty($search['issue_no'])){
+            $where[] = ['issue_no', '=', $search['issue_no']];
+        }
+        if(isset($search['id']) && !empty($search['id'])){
+            $where[] = ['id', '=', $search['id']];
+        }
+        if(isset($search['status']) && !empty($search['status'])){
+            $where[] = ['status', '=', $search['status']];
+        }
+        return $where;
+    }
+
+     /**
+     * @description: 查询单条数据
+     * @param array $search
+     * @return \App\Models\Coin|null
+     */
+    public static function findOne(array $search): ?Issue
+    {
+        return self::model()::where(self::getWhere($search))->first();
+    }
+
+    /**
+     * @description: 查询所有数据
+     * @param array $search
+     * @return \Illuminate\Database\Eloquent\Collection
+     */
+    public static function findAll(array $search = [])
+    {
+        return self::model()::where(self::getWhere($search))->get();
+    }
+
+    /**
+     * @description: 分页查询
+     * @param array $search
+     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
+     */
+    public static function paginate(array $search = [])
+    {
+        $limit = isset($search['limit'])?$search['limit']:15;
+        $paginator = self::model()::where(self::getWhere($search))->paginate($limit);
+        return ['total' => $paginator->total(), 'data' => $paginator->items()];
+    }
+
+    
+}