wesmiler 2 rokov pred
rodič
commit
af7504aa96

+ 4 - 0
addons/xlapp/common/locales/en.js

@@ -960,5 +960,9 @@ export default {
 	"私信": "private letter",
 	"确定退出发布吗?": "确定退出发布吗?",
 	"没有什么可说的": "没有什么可说的",
+	"开始抽奖": "draw",
+	"停止抽奖": "停止抽奖",
+	"抽奖中": "抽奖中",
+	"抱歉您的抽奖次数不足,请先升级或购买节点获得": "抱歉您的抽奖次数不足,请先升级或购买节点获得",
 
 }

+ 4 - 0
addons/xlapp/common/locales/zh-cn.js

@@ -915,6 +915,10 @@ export default {
 	"请输入额度提现数量": "请输入额度提现数量",
 	"次": "次",
 	"您的抽奖次数": "您的抽奖次数",
+	"开始抽奖": "开始抽奖",
+	"停止抽奖": "停止抽奖",
+	"抽奖中": "抽奖中",
+	"抱歉您的抽奖次数不足,请先升级或购买节点获得": "抱歉您的抽奖次数不足,请先升级或购买节点获得",
 
 
 }

+ 15 - 0
app/Http/Controllers/Api/v1/MemberController.php

@@ -274,4 +274,19 @@ class MemberController extends webApp
             return showJson(MemberService::make()->getError(),true, $result);
         }
     }
+
+    /**
+     * 盲盒抽奖
+     * @return array
+     */
+    public function draw()
+    {
+        $params = request()->all();
+        if(!$result = MemberService::make()->draw($this->userId, $params)){
+            $error = MemberService::make()->getError();
+            return showJson($error,false,'',$error==2035?405:($error == 1040?401:-1));
+        }else{
+            return showJson(MemberService::make()->getError(),true, $result);
+        }
+    }
 }

+ 24 - 0
app/Models/DrawLogModel.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 盲盒抽奖记录(算力机列表)-模型
+ * @author laravel开发员
+ * @since 2020/11/11
+ * @package App\Models
+ */
+class DrawLogModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'draw_logs';
+}

+ 24 - 0
app/Models/MachineModel.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 算力机-模型
+ * @author laravel开发员
+ * @since 2020/11/11
+ * @package App\Models
+ */
+class MachineModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'machine';
+}

+ 110 - 0
app/Services/Api/MemberService.php

@@ -16,6 +16,7 @@ use App\Models\AccountLogModel;
 use App\Models\BalanceLogModel;
 use App\Models\CartsModel;
 use App\Models\LiveModel;
+use App\Models\MachineModel;
 use App\Models\MemberBankModel;
 use App\Models\MemberLevelModel;
 use App\Models\MemberModel;
@@ -1755,4 +1756,113 @@ class MemberService extends BaseService
         RedisService::clear($cacheKey);
         return true;
     }
+
+    /**
+     * 盲盒抽奖
+     * @param $userId 抽奖用户ID
+     * @param $params
+     * @return bool
+     */
+    public function draw($userId, $params)
+    {
+        $cacheKey="caches:members:draw_{$userId}";
+        if(RedisService::get($cacheKey.'_lock')){
+            $this->error = 1034;
+            return false;
+        }
+
+        $userInfo = MemberModel::where(['id'=> $userId,'mark'=>1])
+            ->select(['id','nickname','usdt','wait_score','parents','points','parent_id','member_level','power_num','box_num','trc_url','pay_password','status'])
+            ->first();
+        $status = isset($userInfo['status'])? $userInfo['status'] : 0;
+        $userUsdt = isset($userInfo['usdt'])? $userInfo['usdt'] : 0;
+        $boxNum = isset($userInfo['box_num'])? $userInfo['box_num'] : 0;
+        if(empty($userInfo) || $status != 1){
+            $this->error = 2024;
+            return false;
+        }
+
+        if($boxNum <= 0){
+            $this->error = 3101;
+            return false;
+        }
+
+        // 中奖结果
+        $drawRate = ConfigService::make()->getConfigByCode('box_award_rate',20);
+        $drawRate = $drawRate>0 && $drawRate<100? $drawRate : 20;
+
+        $drawMachineExpireDay = ConfigService::make()->getConfigByCode('draw_machine_time',30);
+        $drawMachineExpireDay = $drawMachineExpireDay>0 && $drawMachineExpireDay<360? $drawMachineExpireDay : 30;
+
+        DB::beginTransaction();
+
+        // 扣除次数
+        $updateData = ['box_num'=> DB::raw("box_num -1"),'update_time'=>time()];
+        if(!$this->model->where(['id'=> $userId])->update($updateData)){
+            DB::rollBack();
+            $this->error = 3102;
+            return false;
+        }
+
+        // 是否中奖
+        $isAward = false;
+        $randNum = rand(1000,9999);
+        if($randNum > $drawRate * 10000){
+            $isAward = true;
+        }
+
+        // 未中奖,直接推送消息
+        if(!$isAward){
+            DB::commit();
+
+            // 消息
+            $dateTime = date('Y-m-d H:i:s');
+            MessageService::make()->pushMessage($userId,"盲盒抽奖结果通知","您在{$dateTime}(UTC+8)使用一次盲盒机会抽奖【未中奖】,请继续加油。",3);
+            $this->error = 3107;
+            return true;
+        }
+
+        // 随机获取算力机
+        $machineInfo = MachineModel::where(['is_draw'=>1,'status'=>1,'mark'=>1])
+            ->select(['id as machine_id','name','price','power','month_rate','sl','day_wait_score','day_xd','day_score'])
+            ->orderRaw('rand()')
+            ->first();
+        $machineName = isset($machineInfo['name'])? $machineInfo['name'] : '';
+        if(empty($machineInfo)){
+            DB::rollBack();
+            $this->error = 3103;
+            return false;
+        }
+
+        $orderNo = get_order_num('DM');
+        $machineInfo['user_id'] = $userId;
+        $machineInfo['order_no'] = $orderNo;
+        $machineInfo['create_time'] = time();
+        $machineInfo['status'] = 1;
+        $machineInfo['mark'] = 1;
+
+        // 有效期
+        if($drawMachineExpireDay>0){
+            $machineInfo['expired_at'] = date('Y-m-d H:i:s', time() + $drawMachineExpireDay * 86400);
+        }
+
+        unset($machineInfo['name']);
+
+        if(!MachineModel::insertGetId($machineInfo)){
+            DB::rollBack();
+            $this->error = 3102;
+            return false;
+        }
+
+        // 抽奖完成
+        DB::commit();
+
+        // 消息
+        $dateTime = date('Y-m-d H:i:s');
+        $machineName = $machineName? $machineName : '算力矿机';
+        MessageService::make()->pushMessage($userId,"盲盒抽奖结果通知","您在{$dateTime}(UTC+8)使用一次盲盒机会抽奖【已中奖】一台{$machineName},请查看您的矿机列表查收。",3);
+        $this->error = 3106;
+        return true;
+
+    }
 }

+ 8 - 0
resources/lang/zh-cn/api.php

@@ -244,6 +244,14 @@ return [
     '3014'=> '申请入驻成功,请耐心等候审核',
 
 
+    '3101'=> '抱歉您的抽奖次数不足,请先升级或购买节点获得',
+    '3102'=> '抽奖处理失败,请返回重试',
+    '3103'=> '当前奖品库存不足,请联系客服',
+//    '3105'=> '抽奖成功,请返回重试',
+    '3106'=> '抽奖中奖',
+    '3107'=> '抽奖未中',
+
+
     '112009'=> '供应商账户余额不足,请联系客服',
     '我正在直播,快来看看吧'=>'我正在直播,快来看看吧',
     '打赏消费通知'=>'打赏消费通知',

+ 3 - 0
routes/api.php

@@ -110,6 +110,9 @@ Route::prefix('v1')->group(function(){
     Route::post('/user/withdraw', [\App\Http\Controllers\Api\v1\MemberController::class, 'withdraw']);
     Route::post('/user/recharge', [\App\Http\Controllers\Api\v1\MemberController::class, 'recharge']);
 
+    // 盲盒
+    Route::post('/user/draw', [\App\Http\Controllers\Api\v1\MemberController::class, 'draw']);
+
     // 账单明细
     Route::post('/account/index', [\App\Http\Controllers\Api\v1\AccountController::class, 'index']);
     Route::post('/account/types', [\App\Http\Controllers\Api\v1\AccountController::class, 'types']);