123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- <?php
-
- namespace App\Http\Controllers\Api;
-
- use App\Models\Activitys;
- use App\Models\Configs;
- use App\Models\Corps;
- use App\Models\Departments;
- use App\Services\QuestionService;
- use App\Services\UserService;
- use Illuminate\Http\Request;
- use App\Http\Requests;
- use App\Http\Controllers\Controller;
- use App\Models\Admin;
- use App\Common\Api;
-
- use App\Models\Prizes;
- use App\Models\Users;
- use App\Models\Lotterys;
- use Illuminate\Support\Facades\DB;
- use Excel;
-
- use Qiniu\Auth;
- use Qiniu\Storage\UploadManager;
-
- use App\Services\ActivityService;
- use Illuminate\Support\Facades\Redis;
- use Psy\Test\CodeCleaner\FunctionContextPassTest;
-
- class LoginController extends Controller
- {
-
- public function __construct(){
- }
-
- const QUESTION_UPLOAD_FAIL = 'bsb_question_upload_fail:';
- const USER_UPLOAD_FAIL = 'bsb_user_upload_fail:';
-
- /**
- * 登录校验
- * username varchar()
- * password varchar()
- * 2018-05-08 16:37 韩
- */
- public function Login(Request $request){
- $params = $request->all();
-
- $password = md5($params['password']);
- $res = Admin::where('username', $params['username'])
- ->where('password', $password)
- ->where('status', 1) //1 正常 0 冻结
- ->first();
-
- if($res){
- //用户信息缓存
- $request->session()->put('userInfo', $res);
-
- $user_admin = collect($res)->toArray();
- return Api::json(config('code.success'), trans('msg.login_success'), $user_admin['is_admin']);
- } else {
- return Api::json(config('code.fail'), trans('msg.login_error'));
- }
- }
-
- /**
- * 活动看板
- */
- public function getBoard(Request $request){
- $params = $request->all();
- if(empty($params['activity_id'])){
- return '没参数';
- }
- $data = [];
- $activity_id = $params['activity_id'];
-
- $activityConfigs = Configs::where('activity_id', $activity_id)->first();
-
- //奖品设置
- $data['prizes']['data'] = Prizes::where('activity_id', $activity_id)->get()->toArray();
- $data['prizes']['is_open_prize'] = $activityConfigs['is_open_prize'];
-
- //人员情况
- $user_all = Users::where('activity_id', $activity_id)->count(); //总人数
- $user_binding = Users::where('activity_id', $activity_id)->where('open_id', '!=', null)->where('open_id', '!=', '')->count(); //绑定人数
- $user_blockade = Users::where('activity_id', $activity_id)->where('is_blockade_success', '1')->count(); //必答成功人数
- $data['users']['user_all'] = $user_all;
- $data['users']['user_binding'] = $user_binding;
- $data['users']['user_blockade'] = $user_blockade;
- $data['users']['user_online'] = intval(Redis::get('bs_online:'.$activity_id));
-
- //活动数据
- $activity_info = Configs::where('activity_id', $activity_id)->first()->toArray();
- $data['activity_info'] = $activity_info;
-
- //抽奖情况
- $copper_complete = Users::where('activity_id', $activity_id)->where('knowledge_money', '>=', $activity_info['copper_box_km'])->count();
- $silver_complete = Users::where('activity_id', $activity_id)->where('knowledge_money', '>=', $activity_info['silver_box_km'])->count();
- $gold_complete = Users::where('activity_id', $activity_id)->where('knowledge_money', '>=', $activity_info['gold_box_km'])->count();
-
- $copper_use = Lotterys::where('activity_id', $activity_id)->where('lottery_level', 1)->count();
- $silver_use = Lotterys::where('activity_id', $activity_id)->where('lottery_level', 2)->count();
- $gold_use = Lotterys::where('activity_id', $activity_id)->where('lottery_level', 3)->count();
-
- $data['completes']['copper']['complete'] = $copper_complete;
- $data['completes']['copper']['use'] = $copper_use;
- $data['completes']['copper']['unuse'] = $copper_complete - $copper_use;
- $data['completes']['silver']['complete'] = $silver_complete;
- $data['completes']['silver']['use'] = $silver_use;
- $data['completes']['silver']['unuse'] = $silver_complete - $silver_use;
- $data['completes']['gold']['complete'] = $gold_complete;
- $data['completes']['gold']['use'] = $gold_use;
- $data['completes']['gold']['unuse'] = $gold_complete - $gold_use;
-
- //单位参与率排行
- $department_user_info = DB::select("select count(*) as user_num,sum(is_blockade_success) as sum_join,avg(knowledge_money) as avg_km,department_id
- from bs_users where activity_id={$activity_id} and department_id>0 and status=1 group by department_id");
-
- $department_user_info = json_decode(json_encode($department_user_info), true);
- $joins = [];
- $user_nums = [];
- $avg_kms = [];
- foreach($department_user_info as $k=>$v){
- $department_user_info[$k]['department_name'] = Departments::where('department_id', $v['department_id'])->value('department_name');
- $department_user_info[$k]['join'] = $v['user_num'] != 0 ? $v['sum_join']/$v['user_num']*100 : 0;
- $joins[] = $v['sum_join']/$v['user_num'];
- $user_nums[] = $v['user_num'];
- $avg_kms[] = $v['avg_km'];
- }
-
- $kms = $department_user_info;
- array_multisort($joins,SORT_DESC,$user_nums,SORT_DESC,$department_user_info);
- $data['departments']['data'] = $department_user_info;
- $data['departments']['open_department_top'] = $activityConfigs['open_department_top'];
-
- //单位知识币排行
- array_multisort($avg_kms,SORT_DESC,$user_nums,SORT_DESC,$kms);
- $data['avg_km'] = $kms;
-
- //个人知识币排行
- $user_km = Users::where('activity_id', $activity_id)->where('status', 1)->where('is_blockade_success', 1)->orderBy('knowledge_money', 'desc')->limit(100)->get()->toArray();
- foreach ($user_km as $k=>$v) {
- $user_km[$k]['department_name'] = Departments::where('department_id', $v['department_id'])->value('department_name');
- }
- $data['user_km'] = $user_km;
-
- return view('board', ['data'=>$data]);
- }
-
- /**
- * 看板下载
- */
- public function getDownload(Request $request){
- $params = $request->all();
-
- if(empty($params['activity_id']) || empty($params['type'])){
- return Api::json(config('code.params_error'), trans('msg.params_error'));
- }
-
- if($params['type'] == 'join') {
- $joins_info = Users::where('activity_id', $params['activity_id'])->where('status', 1)->where('is_blockade_success', 1)->orderBy('blockade_success_time', 'desc')->get()->toArray();
-
- $data = [];
- $res = [];
- $joins_info = json_decode(json_encode($joins_info), true);
- foreach ($joins_info as $k => $v) {
- $res['name'] = $v['name'];
- $res['department_name'] = Departments::where('department_id', $v['department_id'])->value('department_name');
- $res['knowledge_money'] = $v['knowledge_money'];
- $res['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) {
- $sheet->rows($data);
- });
- })->export('xlsx');
- } elseif($params['type'] == 'lottery') {
- $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) {
- $userInfo = Users::where('user_id', $v['user_id'])->first()->toArray();
- $res['name'] = $userInfo['name'];
- $res['department_name'] = Departments::where('department_id', $userInfo['department_id'])->value('department_name');
- $res['knowledge_money'] = $v['prize_name'];
- $res['blockade_success_time'] = $v['lottery_time'];
- $data[] = $res;
- }
- $hands = array('姓名', '部门', '获得奖品', '抽奖时间');
- array_unshift($data, $hands);
-
- Excel::create('抽奖情况', function ($excel) use ($data) {
- $excel->sheet('lottery', function ($sheet) use ($data) {
- $sheet->rows($data);
- });
- })->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 getBaseAdmin(Request $request){
- $user_info = $request->session()->get('userInfo');
- if($user_info['corp_id'] != 0){
- $user_info['corp_short_name'] = Corps::where('corp_id', $user_info['corp_id'])->value('corp_short_name');
- }
-
- return Api::json(config('code.success'), trans('msg.success'), $user_info);
- }
-
- /**
- * 退出登录
- */
- public function loginOut(Request $request){
- $request->session()->forget('userInfo');
-
- return redirect('manage');
- // return Api::json(config('code.success'), trans('msg.success'));
- }
-
- /**
- * 下载上传失败的数据(优化)
- * 2018-07-02 15;00:00
- * @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);
- }
- }
-
-
- /**
- * 获取七牛上传头token
- */
- public function getUploadToken(Request $request){
- try {
- $accessKey = env("QINIU_ACCESS_KEY");
- $secretKey = env("QINIU_SECRET_KEY");
- $auth = new Auth($accessKey, $secretKey);
- $bucket = env("QINIU_BUCKET");
- // 生成上传Token
- $token = $auth->uploadToken($bucket);
-
- $data['token'] = $token;
- return Api::json(config('code.success'), trans('msg.success'), $data);
- }catch(\Exception $e) {
- return Api::serviceError($e);
- }
- }
-
- /**
- * 测试方法
- * @param Request $request
- * @return string
- */
- public function test(Request $request){
- $str = '韩\u202e乐1552\u202d8333321\u202ccc';
- $str = Api::unicode_decode($str);
- // $pattern = "/[\x{007f}-\x{009f}]|\x{00ad}|[\x{0483}-\x{0489}]|[\x{0559}-\x{055a}]|\x{058a}|[\x{0591}-\x{05bd}]|\x{05bf}|[\x{05c1}-\x{05c2}]|[\x{05c4}-\x{05c7}]|[\x{0606}-\x{060a}]|[\x{063b}-\x{063f}]|\x{0674}|[\x{06e5}-\x{06e6}]|\x{070f}|[\x{076e}-\x{077f}]|\x{0a51}|\x{0a75}|\x{0b44}|[\x{0b62}-\x{0b63}]|[\x{0c62}-\x{0c63}]|[\x{0ce2}-\x{0ce3}]|[\x{0d62}-\x{0d63}]|\x{135f}|[\x{200b}-\x{200f}]|[\x{2028}-\x{202e}]|\x{2044}|\x{2071}|[\x{f701}-\x{f70e}]|[\x{f710}-\x{f71a}]|\x{fb1e}|[\x{fc5e}-\x{fc62}]|\x{feff}|\x{fffc}/u";
- // $str = preg_replace($pattern, '', $str);
- // return $str;
- // $str_arr = preg_split('/(?<!^)(?!$)/u', $str );
- // $str_arr = preg_match_all("/./u", $str, $arr);
- // foreach()
- return $str;
- }
-
-
- }
- ?>
|