all(); $keys = array('corp_id', 'app_id'); foreach ($keys as $key) { if (empty($params[$key])) { return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null')); } } if(!empty($params['activity_id'])){ $res = ActivityService::getConfigs($params['activity_id'], $params['corp_id']); } else { $res = ActivityService::addAct($params['corp_id'], $params['app_id']); } return Api::json($res['code'], $res['msg'], $res['data']); }catch(\Exception $e) { return Api::serviceError($e); } } /** * 保存活动 * 2018-06-20 10:25:00 * @param Request $request * @return string */ public function postSave(Request $request){ try { $params = $request->all(); $keys = array('activity_id', 'corp_id', 'app_id', 'title', 'start_time', 'end_time'); foreach ($keys as $key) { if (empty($params[$key])) { return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null')); } } $res = ActivityService::saveActivity($params); return Api::json($res['code'], $res['msg'], $res['data']); }catch(\Exception $e) { return Api::serviceError($e); } } /** * 暂停活动 * @param Request $request * @return string */ public function postPause(Request $request){ try { $params = $request->all(); $keys = array('activity_id', 'corp_id'); foreach ($keys as $key) { if (empty($params[$key])) { return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null')); } } $res = ActivityService::stopActivity($params); return Api::json($res['code'], $res['msg']); }catch(\Exception $e) { return Api::serviceError($e); } } /** * 活动下架(删除) * @param Request $request * @return string */ public function postDelete(Request $request){ try { $params = $request->all(); $keys = array('activity_id'); foreach ($keys as $key) { if (empty($params[$key])) { return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null')); } } $res = ActivityService::changeActStatus($params); return Api::json($res['code'], $res['msg']); }catch(\Exception $e) { return Api::serviceError($e); } } /** * 活动复制 * @param Request $request * @return string */ public function postCopy(Request $request){ try { $params = $request->all(); $keys = array('activity_id'); foreach ($keys as $key) { if (empty($params[$key])) { return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null')); } } $res = ActivityService::copyActivity($params); if ($res) { $data['activity_id'] = $res; return Api::json(config('code.success'), trans('msg.success'), $data); } else { return Api::json(config('code.fail'), trans('msg.fail')); } }catch(\Exception $e) { return Api::serviceError($e); } } /** * 下载上传失败的数据 * @param Request $request * @return string */ public function getErrorUpload(Request $request){ try { $params = $request->all(); $keys = array('corp_id', 'activity_id', 'type'); foreach ($keys as $key) { if (empty($params[$key])) { return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null')); } } $actInfo = ActivityService::getActivityInfo($params['activity_id'], $params['corp_id']); if (!$actInfo) { return Api::json(config('code.activity_not_exist'), trans('msg.activity_not_exist')); } $data = []; if($params['type'] == 'user'){ $data = Redis::get(self::USER_UPLOAD_FAIL.$params['activity_id']); $data = json_decode($data, true); if(empty($data)) return Api::json(config('code.fail'), '无错误上传数据'); UserService::downloadUserExcel($data); } elseif($params['type'] == 'question') { $data = Redis::get(self::QUESTION_UPLOAD_FAIL.$params['activity_id']); $data = json_decode($data, true); if(empty($data)) return Api::json(config('code.fail'), '无错误上传数据'); QuestionService::downloadQuestionExcel($data); } }catch(\Exception $e) { return Api::serviceError($e); } } /** * 活动看板 */ public function getBoard(Request $request){ $params = $request->all(); $activity_id = $params['activity_id']; if(empty($activity_id) || !isset($activity_id)){ return Api::json(config('code.params_error'), trans('msg.params_error')); } //概况 $data = []; $data['time'] = date('Y-m-d H:i:s'); $data['users']['total'] = Users::where('activity_id', $activity_id)->where('status', 1)->count(); $data['users']['join'] = Users::where('activity_id', $activity_id)->where('status', 1)->where('platform', '!=', NULL)->count(); $data['users']['is_blockade_success'] = Users::where('activity_id', $activity_id)->where('status', 1)->where('is_blockade_success', 1)->count(); $userLotterys = Lotterys::where('activity_id', $activity_id)->groupBy('user_id')->get(); $data['users']['prize'] = count($userLotterys); $data['users']['blockades'] = Blockades::where('activity_id', $activity_id)->count(); $data['users']['user_online'] = intval(Redis::get('bs_online:'.$activity_id)); //奖品情况 $data['prize'] = Prizes::where('activity_id', $activity_id)->get()->toArray(); $data['prize_counts'] = 0; $data['day_counts'] = 0; $data['total_counts'] = 0; foreach($data['prize'] as $k=>$v){ $key = 'bs_prize_count:'.$v['prize_id'].':'.date('Ymd'); if(Redis::exists($key)){ $data['prize'][$k]['day_count'] = $v['prize_day_rule']- Redis::get($key); } else { $data['prize'][$k]['day_count'] = 0; } $data['prize_counts'] += $v['prize_count']; $data['day_counts'] += $data['prize'][$k]['day_count']; $data['total_counts'] += $v['prize_grant_count']; $data['prize'][$k]['lottery_name'] = LotteryBoxs::where('activity_id', $activity_id)->where('lottery_level', $v['lottery_level'])->value('lottery_name'); } //知识币情况 $boxConfigs = LotteryBoxs::where('activity_id', $activity_id)->where('status', 1)->get(); $data['user_knowledge_success'] = 0; $data['prize_count'] = 0; $data['money'] = []; foreach($boxConfigs as $k=>$v){ $data['money'][$v['open_rule']]['user_success'] = Users::where('activity_id', $activity_id)->where('status', 1)->where('knowledge_money', '>=', $v['open_rule'])->count(); $data['money'][$v['open_rule']]['prize'] = Lotterys::where('activity_id', $activity_id)->where('lottery_level', $v['lottery_level'])->count(); if($data['money'][$v['open_rule']]['user_success'] != 0){ $data['money'][$v['open_rule']]['proportion'] = sprintf("%.2f", $data['money'][$v['open_rule']]['prize'] / $data['money'][$v['open_rule']]['user_success']); } else { $data['money'][$v['open_rule']]['proportion'] = 0; } $data['prize_count'] += $data['money'][$v['open_rule']]['prize']; //总抽奖人数 } if(!empty($data['money'])){ ksort($data['money']); } $data['user_knowledge_success'] = reset($data['money'])['user_success']; //知识币完成人数 //个人排行 $pkData = Redis::zRevrangebyscore('bs_top:users:pk:'.$params['activity_id'],"+inf", "-inf"); $topUserInfos = Users::where('activity_id', $params['activity_id'])->where('status', 1)->get()->toArray(); if(!empty($pkData)) { $userDatas = []; foreach($topUserInfos as $k=>$v){ $userDatas[$v['user_id']] = $v; } foreach ($pkData as $k => $v) { $pkData[$k] = $userDatas[$v]; } $data['top']['user']['pk'] = json_decode(json_encode($pkData), true); } else { $data['top']['user']['pk'] = []; } $sql = Users::where('activity_id', $activity_id)->where('status', 1)->orderByDesc('knowledge_money')->limit(100); $data['top']['user']['knowledge_money'] = $sql->get(); $levelStarConfig = Configs::where('activity_id', $params['activity_id'])->value('level_star_config'); $levelStarConfig = json_decode($levelStarConfig, true); $departmentInfo = Departments::where('activity_id', $params['activity_id'])->pluck('department_name', 'department_id')->toArray(); if(!empty($data['top']['user']['knowledge_money'])) { foreach ($data['top']['user']['knowledge_money'] as $k=>$v) { $data['top']['user']['knowledge_money'][$k]['department_name'] = $v['department_id'] == 0 ? '' : $departmentInfo[$v['department_id']]; } } if(!empty($data['top']['user']['pk'])) { foreach ($data['top']['user']['pk'] as $k=>$v) { $data['top']['user']['pk'][$k]['department_name'] = $v['department_id'] == 0 ? '' : $departmentInfo[$v['department_id']]; $data['top']['user']['pk'][$k]['level_name'] = $levelStarConfig[$v['user_level']]['name']; } $data['top']['user']['pk'] = collect($data['top']['user']['pk'])->take(100); } //部门排行(参与率) $deparments = Departments::where('activity_id', $activity_id)->where('status', 1)->get()->toArray(); if($deparments) { $result = Users::where('activity_id', $params['activity_id']) ->select(DB::raw('count(user_id) as count, department_id, sum(is_blockade_success) as success_num, sum(knowledge_money) as moneys')) ->where('status', 1) ->where('department_id', '!=', 0) ->groupBy('department_id') ->get()->toArray(); foreach($result as $k=>$v){ if(isset($departmentInfo[$v['department_id']])) { $result[$k]['department_name'] = $departmentInfo[$v['department_id']]; } else { $result[$k]['department_name'] = ''; } } //参与率、知识币、平均知识币 $departmentRes = collect($result)->reduce(function($departmentRes, $item){ if($item['count'] != 0) { $departmentRes['department_join'][$item["department_name"]] = sprintf("%.2f", $item["success_num"] / $item["count"]); $departmentRes['department_knowledge'][$item["department_name"]]['avg'] = round($item['moneys']/$item["count"]); } else { $departmentRes['department_join'][$item["department_name"]] = 0; $departmentRes['department_knowledge'][$item["department_name"]]['avg'] = $item['moneys']; } $departmentRes['department_knowledge'][$item["department_name"]]['count'] = $item['moneys']; return $departmentRes; }); $data['top']['department_knowledge'] = $departmentRes['department_knowledge']; $data['top']['department_join'] = $departmentRes['department_join']; arsort($data['top']['department_knowledge']); arsort($data['top']['department_join']); } //游戏数据 $data['must']['total'] = Blockades::where('activity_id', $activity_id)->where('is_first', 1)->count(); $data['must']['question_count'] = Blockades::where('activity_id', $activity_id)->where('is_first', 1)->sum('question_count'); $must_success = Blockades::where('activity_id', $activity_id)->where('is_first', 1)->where('is_success', 1)->count(); if($data['must']['total'] != 0) { $data['must']['success'] = sprintf("%.2f", $must_success / $data['must']['total']); } else { $data['must']['success'] = 0; } $data['blockade']['total'] = Blockades::where('activity_id', $activity_id)->where('is_first', 0)->count(); $data['blockade']['question_count'] = Blockades::where('activity_id', $activity_id)->where('is_first', 0)->sum('question_count'); $blockade_success = Blockades::where('activity_id', $activity_id)->where('is_first', 0)->where('is_success', 1)->count(); if($data['blockade']['total'] != 0) { $data['blockade']['success'] = sprintf("%.2f", $blockade_success / $data['blockade']['total']); } else { $data['blockade']['success'] = 0; } $data['pk']['total'] = PkRooms::where('activity_id', $activity_id)->count(); $pk_question_ids = PkRooms::where('activity_id', $activity_id)->pluck('question_ids'); $data['pk']['question_count'] = 0; foreach($pk_question_ids as $v){ $ids = explode(',', $v); $data['pk']['question_count'] += count($ids); } $data['pk']['unstart'] = PkRooms::where('activity_id', $activity_id)->whereIn('status', [1,2])->count(); $data['pk']['records'] = KnowledgeRecords::where('activity_id', $activity_id)->where('get_mode', 'pk')->where('money', '>', 0)->sum('money'); $data['configs'] = ActivityService::getActivityConfig($activity_id); $data['activity_id'] = $activity_id; return view('board', ['data'=>$data]); } /** * 看板下载 */ public function getBoardDownload(Request $request){ set_time_limit(0); ignore_user_abort(true); $params = $request->all(); $keys = array('activity_id'); foreach($keys as $key){ if(empty($params[$key])){ return Api::json(config('code.params_error'), trans('params.'.$key).trans('msg.params_error')); } } $activity_info = ActivityService::getActivityInfo($params['activity_id']); $departmentInfo = Departments::where('activity_id', $params['activity_id'])->pluck('department_name', 'department_id')->toArray(); if($params['type'] == 'join') { $joins_info = Users::where('activity_id', $params['activity_id'])->where('status', 1)->orderByDesc('knowledge_money')->orderByDesc('blockade_success_time')->get()->toArray(); $data = []; $res = []; $joins_info = json_decode(json_encode($joins_info), true); foreach ($joins_info as $k => $v) { $res['name'] = $v['name']; if($v['department_id'] != 0) { $res['department_name'] = $departmentInfo[$v['department_id']]; } else { $res['department_name'] = ''; } if(substr($activity_info['auth_type'],-3) == 'add'){ $res['guid'] = $v['open_id']; } else { $res['guid'] = $v['guid']; } $res['knowledge_money'] = $v['knowledge_money']; $res['blockade_success_time'] = empty($v['blockade_success_time'])?'未完成':date('Y-m-d H:i:s', $v['blockade_success_time']); $data[] = $res; } $hands = array('姓名', '部门', '唯一标识', '知识币', '必答完成时间'); array_unshift($data, $hands); Excel::create('参与情况', function ($excel) use ($data) { $excel->sheet('join', function ($sheet) use ($data) { $tot = count($data); $sheet->setWidth(array( 'A' => 15, 'B' => 15, 'C' => 25, 'D' => 15, 'E' => 25, ))->rows($data)->setFontSize(12); $sheet->setStyle([ 'font' => [ 'size' => 12, 'bold' => false, ] ])->cells('A1:E1', function($cells){ //设置单元格格式 $cells->setAlignment('center'); //文本对齐方式 $cells->setFontWeight('bold'); //粗体 $cells->setBackground('#92D050'); //底色 })->cells('A1:E'.$tot, function($cells){ $cells->setAlignment('center'); //文本对齐方式 }); }); })->export('xlsx'); } elseif($params['type'] == 'lottery') { DB::enableQueryLog(); $lotterys = DB::table('bs_user_lotterys') -> leftJoin('bs_prizes','bs_user_lotterys.prize_id','=','bs_prizes.prize_id') -> leftJoin('bs_users','bs_user_lotterys.user_id','=','bs_users.user_id') -> select('bs_users.name','bs_users.department_id','bs_users.guid','bs_user_lotterys.prize_name','bs_user_lotterys.lottery_time','bs_prizes.prize_id') -> where('bs_user_lotterys.activity_id','=',$params['activity_id']) -> orderBy('bs_user_lotterys.lottery_time','desc') -> get() -> toArray(); Log::info(DB::getQueryLog()); // $lotterys = Lotterys::where('activity_id', $params['activity_id']) ->orderBy('lottery_time', 'desc')->get()->toArray(); $data = []; $res = []; $lotterys = json_decode(json_encode($lotterys), true); foreach ($lotterys as $k => $v) { // $prizeStatus = Prizes::where('prize_id', $v['prize_id'])->value('status'); if (!$v['prize_id']) { continue; } // $userInfo = Users::where('user_id', $v['user_id'])->first()->toArray(); $res['name'] = $v['name']; if($v['department_id'] != 0) { $res['department_name'] = $departmentInfo[$v['department_id']]; } else { $res['department_name'] = ''; } $res['guid'] = $v['guid']; $res['prize_name'] = $v['prize_name']; $res['lottery_time'] = $v['lottery_time']; $data[] = $res; } $hands = array('姓名', '部门', '手机号码/ID', '获得奖品', '抽奖时间'); array_unshift($data, $hands); Excel::create('抽奖情况', function ($excel) use ($data) { $excel->sheet('lottery', function ($sheet) use ($data) { $tot = count($data); $sheet->setWidth(array( 'A' => 15, 'B' => 15, 'C' => 25, 'D' => 15, 'E' => 25, ))->rows($data)->setFontSize(12); $sheet->setStyle([ 'font' => [ 'size' => 12, 'bold' => false, ] ])->cells('A1:E1', function ($cells) { //设置单元格格式 $cells->setAlignment('center'); //文本对齐方式 $cells->setFontWeight('bold'); //粗体 $cells->setBackground('#92D050'); //底色 })->cells('A1:E' . $tot, function ($cells) { $cells->setAlignment('center'); //文本对齐方式 }); }); })->export('xlsx'); } elseif ($params['type'] == 'pk'){ // $result = DB::select("select department_id,guid,`name`,user_level,user_star,pk_lost_count,pk_win_count,pk_draw_count from bs_users as b where status=1 and activity_id=".$params['activity_id']." ORDER BY b.user_level desc,b.user_star desc"); // $res = json_decode(json_encode($result), true); ini_set('memory_limit', '256M'); set_time_limit(0); //获取配置信息 $levelStarConfig = Configs::where('activity_id', $params['activity_id'])->value('level_star_config'); $levelStarConfig = json_decode($levelStarConfig, true); $pkData = Redis::zRevrangebyscore('bs_top:users:pk:'.$params['activity_id'],"+inf", "-inf"); $topUserInfos = Users::where('activity_id', $params['activity_id'])->get(); if(!empty($pkData)) { $userDatas = []; foreach($topUserInfos as $k=>$v){ $userDatas[$v['user_id']] = $v; } foreach ($pkData as $k => $v) { $pkData[$k] = $userDatas[$v]; } unset($userDatas); unset($topUserInfos); $pkData = collect($pkData)->toArray(); $data = []; foreach($pkData as $k=>$v){ $data[$k]['name'] = $v['name']; if($v['department_id'] != 0) { $departmentName = $departmentInfo[$v['department_id']]; } else { $departmentName = ''; } $data[$k]['department_name'] = !$departmentName ? '': $departmentName; $data[$k]['guid'] = $v['guid']; $data[$k]['top'] = $k+1; $data[$k]['level_name'] = $levelStarConfig[$v['user_level']]['name']; $data[$k]['star_num'] = $v['user_star']; $data[$k]['pk_total'] = $v['pk_lost_count'] + $v['pk_win_count'] + $v['pk_draw_count']; $data[$k]['pk_win'] = $v['pk_win_count']; $data[$k]['pk_lost'] = $v['pk_lost_count']; $data[$k]['pk_draw'] = $v['pk_draw_count']; $data[$k]['blockade_success'] = empty($v['is_blockade_success_copy'])?'未参与':'参与'; $data[$k]['knowledge_money'] = $v['knowledge_money']; } unset($pkData); } else { $data = []; } $hands = array('姓名', '部门', '手机号码/ID', '排名', '段位', '星数', 'PK场数', '胜场', '负场', '平局','是否参与','知识币'); array_unshift($data, $hands); Excel::create('PK情况', function ($excel) use ($data) { $excel->sheet('lottery', function ($sheet) use ($data) { $tot = count($data); $sheet->setWidth(array( 'A' => 15, 'B' => 15, 'C' => 25, 'D' => 25, 'E' => 15, 'F' => 25, 'G' => 25, 'H' => 25, 'I' => 25, 'J' => 25, 'K' => 25, 'L' => 25, ))->rows($data)->setFontSize(12); $sheet->setStyle([ 'font' => [ 'size' => 12, 'bold' => false, ] ])->cells('A1:L1', function ($cells) { //设置单元格格式 $cells->setAlignment('center'); //文本对齐方式 $cells->setFontWeight('bold'); //粗体 $cells->setBackground('#92D050'); //底色 })->cells('A1:L' . $tot, function ($cells) { $cells->setAlignment('center'); //文本对齐方式 }); }); })->export('xlsx'); } else { return Api::json(config('code.params_error'), trans('msg.params_error')); } } /** * 下载模板 */ public function getDownloadModel(Request $request){ $params = $request->all(); if(empty($params['type'])){ return Api::json(config('code.params_error'), trans('params.type').trans('msg.params_not_null')); } else { if($params['type'] == 'user'){ $url = '/model/人员模板.xlsx'; //人员导入模板 } else { $url = '/model/题库模板.xlsx'; //题库导入模板 } header('location:/manage'.$url); } } /** * 获取获奖情况(发奖使用) * @param Request $request * @return string */ public function getPrizeUsers(Request $request){ $params = $request->all(); $keys = array('activity_id'); foreach($keys as $key){ if(empty($params[$key])){ return Api::json(config('code.params_error'), trans('params.'.$key).trans('msg.params_error')); } } $lotterys = Lotterys::where('activity_id', $params['activity_id'])->orderBy('prize_id', 'desc')->get()->toArray(); $data = []; $res = []; $lotterys = json_decode(json_encode($lotterys), true); foreach ($lotterys as $k => $v) { $userInfo = Users::where('user_id', $v['user_id'])->first()->toArray(); $res['name'] = $userInfo['name']; $res['avatar'] = $userInfo['avatar']; $res['department_name'] = Departments::where('department_id', $userInfo['department_id'])->value('department_name'); $res['prize_name'] = $v['prize_name']; $res['prize_image'] = $v['prize_image_url']; $res['blockade_success_time'] = $v['lottery_time']; $data[] = $res; } return view('user_prize', ['data'=>$data]); } /** * 修改PK段位配置 * @param Request $request * @return string */ public function postModifyLevelConfig(Request $request){ $params = $request->all(); $keys = array('activity_id', 'level_one', 'level_two', 'level_three', 'level_four', 'level_five', 'level_six'); foreach($keys as $key){ if(empty($params[$key])){ return Api::json(config('code.params_error'), $key .trans('msg.params_error')); } } $res = ActivityService::modifyLevelConfig($params); return Api::json($res['code'], $res['msg'], $res['data']); } } ?>