|
|
@@ -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;
|
|
|
+
|
|
|
+ }
|
|
|
}
|