LoginController.php 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Models\Activitys;
  4. use App\Models\Configs;
  5. use App\Models\Corps;
  6. use App\Models\Departments;
  7. use App\Services\QuestionService;
  8. use App\Services\UserService;
  9. use Illuminate\Http\Request;
  10. use App\Http\Requests;
  11. use App\Http\Controllers\Controller;
  12. use App\Models\Admin;
  13. use App\Common\Api;
  14. use App\Models\Prizes;
  15. use App\Models\Users;
  16. use App\Models\Lotterys;
  17. use Illuminate\Support\Facades\DB;
  18. use Excel;
  19. use Qiniu\Auth;
  20. use Qiniu\Storage\UploadManager;
  21. use App\Services\ActivityService;
  22. use Illuminate\Support\Facades\Redis;
  23. use Psy\Test\CodeCleaner\FunctionContextPassTest;
  24. class LoginController extends Controller
  25. {
  26. public function __construct(){
  27. }
  28. const QUESTION_UPLOAD_FAIL = 'bsb_question_upload_fail:';
  29. const USER_UPLOAD_FAIL = 'bsb_user_upload_fail:';
  30. /**
  31. * 登录校验
  32. * username varchar()
  33. * password varchar()
  34. * 2018-05-08 16:37 韩
  35. */
  36. public function Login(Request $request){
  37. $params = $request->all();
  38. $password = md5($params['password']);
  39. $res = Admin::where('username', $params['username'])
  40. ->where('password', $password)
  41. ->where('status', 1) //1 正常 0 冻结
  42. ->first();
  43. if($res){
  44. //用户信息缓存
  45. $request->session()->put('userInfo', $res);
  46. $user_admin = collect($res)->toArray();
  47. return Api::json(config('code.success'), trans('msg.login_success'), $user_admin['is_admin']);
  48. } else {
  49. return Api::json(config('code.fail'), trans('msg.login_error'));
  50. }
  51. }
  52. /**
  53. * 活动看板
  54. */
  55. public function getBoard(Request $request){
  56. $params = $request->all();
  57. if(empty($params['activity_id'])){
  58. return '没参数';
  59. }
  60. $data = [];
  61. $activity_id = $params['activity_id'];
  62. $activityConfigs = Configs::where('activity_id', $activity_id)->first();
  63. //奖品设置
  64. $data['prizes']['data'] = Prizes::where('activity_id', $activity_id)->get()->toArray();
  65. $data['prizes']['is_open_prize'] = $activityConfigs['is_open_prize'];
  66. //人员情况
  67. $user_all = Users::where('activity_id', $activity_id)->count(); //总人数
  68. $user_binding = Users::where('activity_id', $activity_id)->where('open_id', '!=', null)->where('open_id', '!=', '')->count(); //绑定人数
  69. $user_blockade = Users::where('activity_id', $activity_id)->where('is_blockade_success', '1')->count(); //必答成功人数
  70. $data['users']['user_all'] = $user_all;
  71. $data['users']['user_binding'] = $user_binding;
  72. $data['users']['user_blockade'] = $user_blockade;
  73. $data['users']['user_online'] = intval(Redis::get('bs_online:'.$activity_id));
  74. //活动数据
  75. $activity_info = Configs::where('activity_id', $activity_id)->first()->toArray();
  76. $data['activity_info'] = $activity_info;
  77. //抽奖情况
  78. $copper_complete = Users::where('activity_id', $activity_id)->where('knowledge_money', '>=', $activity_info['copper_box_km'])->count();
  79. $silver_complete = Users::where('activity_id', $activity_id)->where('knowledge_money', '>=', $activity_info['silver_box_km'])->count();
  80. $gold_complete = Users::where('activity_id', $activity_id)->where('knowledge_money', '>=', $activity_info['gold_box_km'])->count();
  81. $copper_use = Lotterys::where('activity_id', $activity_id)->where('lottery_level', 1)->count();
  82. $silver_use = Lotterys::where('activity_id', $activity_id)->where('lottery_level', 2)->count();
  83. $gold_use = Lotterys::where('activity_id', $activity_id)->where('lottery_level', 3)->count();
  84. $data['completes']['copper']['complete'] = $copper_complete;
  85. $data['completes']['copper']['use'] = $copper_use;
  86. $data['completes']['copper']['unuse'] = $copper_complete - $copper_use;
  87. $data['completes']['silver']['complete'] = $silver_complete;
  88. $data['completes']['silver']['use'] = $silver_use;
  89. $data['completes']['silver']['unuse'] = $silver_complete - $silver_use;
  90. $data['completes']['gold']['complete'] = $gold_complete;
  91. $data['completes']['gold']['use'] = $gold_use;
  92. $data['completes']['gold']['unuse'] = $gold_complete - $gold_use;
  93. //单位参与率排行
  94. $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
  95. from bs_users where activity_id={$activity_id} and department_id>0 and status=1 group by department_id");
  96. $department_user_info = json_decode(json_encode($department_user_info), true);
  97. $joins = [];
  98. $user_nums = [];
  99. $avg_kms = [];
  100. foreach($department_user_info as $k=>$v){
  101. $department_user_info[$k]['department_name'] = Departments::where('department_id', $v['department_id'])->value('department_name');
  102. $department_user_info[$k]['join'] = $v['user_num'] != 0 ? $v['sum_join']/$v['user_num']*100 : 0;
  103. $joins[] = $v['sum_join']/$v['user_num'];
  104. $user_nums[] = $v['user_num'];
  105. $avg_kms[] = $v['avg_km'];
  106. }
  107. $kms = $department_user_info;
  108. array_multisort($joins,SORT_DESC,$user_nums,SORT_DESC,$department_user_info);
  109. $data['departments']['data'] = $department_user_info;
  110. $data['departments']['open_department_top'] = $activityConfigs['open_department_top'];
  111. //单位知识币排行
  112. array_multisort($avg_kms,SORT_DESC,$user_nums,SORT_DESC,$kms);
  113. $data['avg_km'] = $kms;
  114. //个人知识币排行
  115. $user_km = Users::where('activity_id', $activity_id)->where('status', 1)->where('is_blockade_success', 1)->orderBy('knowledge_money', 'desc')->limit(100)->get()->toArray();
  116. foreach ($user_km as $k=>$v) {
  117. $user_km[$k]['department_name'] = Departments::where('department_id', $v['department_id'])->value('department_name');
  118. }
  119. $data['user_km'] = $user_km;
  120. return view('board', ['data'=>$data]);
  121. }
  122. /**
  123. * 看板下载
  124. */
  125. public function getDownload(Request $request){
  126. $params = $request->all();
  127. if(empty($params['activity_id']) || empty($params['type'])){
  128. return Api::json(config('code.params_error'), trans('msg.params_error'));
  129. }
  130. if($params['type'] == 'join') {
  131. $joins_info = Users::where('activity_id', $params['activity_id'])->where('status', 1)->where('is_blockade_success', 1)->orderBy('blockade_success_time', 'desc')->get()->toArray();
  132. $data = [];
  133. $res = [];
  134. $joins_info = json_decode(json_encode($joins_info), true);
  135. foreach ($joins_info as $k => $v) {
  136. $res['name'] = $v['name'];
  137. $res['department_name'] = Departments::where('department_id', $v['department_id'])->value('department_name');
  138. $res['knowledge_money'] = $v['knowledge_money'];
  139. $res['blockade_success_time'] = date('Y-m-d H:i:s', $v['blockade_success_time']);
  140. $data[] = $res;
  141. }
  142. $hands = array('姓名', '部门', '知识币', '必答完成时间');
  143. array_unshift($data, $hands);
  144. Excel::create('参与情况', function ($excel) use ($data) {
  145. $excel->sheet('join', function ($sheet) use ($data) {
  146. $sheet->rows($data);
  147. });
  148. })->export('xlsx');
  149. } elseif($params['type'] == 'lottery') {
  150. $lotterys = Lotterys::where('activity_id', $params['activity_id'])->orderBy('lottery_time', 'desc')->get()->toArray();
  151. $data = [];
  152. $res = [];
  153. $lotterys = json_decode(json_encode($lotterys), true);
  154. foreach ($lotterys as $k => $v) {
  155. $userInfo = Users::where('user_id', $v['user_id'])->first()->toArray();
  156. $res['name'] = $userInfo['name'];
  157. $res['department_name'] = Departments::where('department_id', $userInfo['department_id'])->value('department_name');
  158. $res['knowledge_money'] = $v['prize_name'];
  159. $res['blockade_success_time'] = $v['lottery_time'];
  160. $data[] = $res;
  161. }
  162. $hands = array('姓名', '部门', '获得奖品', '抽奖时间');
  163. array_unshift($data, $hands);
  164. Excel::create('抽奖情况', function ($excel) use ($data) {
  165. $excel->sheet('lottery', function ($sheet) use ($data) {
  166. $sheet->rows($data);
  167. });
  168. })->export('xlsx');
  169. } else {
  170. return Api::json(config('code.params_error'), trans('msg.params_error'));
  171. }
  172. }
  173. /**
  174. * 下载模板
  175. */
  176. public function getDownloadModel(Request $request){
  177. $params = $request->all();
  178. if(empty($params['type'])){
  179. return Api::json(config('code.params_error'), trans('params.type').trans('msg.params_not_null'));
  180. } else {
  181. if($params['type'] == 'user'){
  182. $url = '/model/人员模板.xlsx'; //人员导入模板
  183. } else {
  184. $url = '/model/题库模板.xlsx'; //题库导入模板
  185. }
  186. header('location:/manage'.$url);
  187. }
  188. }
  189. /**
  190. * 获取用户信息
  191. * @param Request $request
  192. * @return string
  193. */
  194. public function getBaseAdmin(Request $request){
  195. $user_info = $request->session()->get('userInfo');
  196. if($user_info['corp_id'] != 0){
  197. $user_info['corp_short_name'] = Corps::where('corp_id', $user_info['corp_id'])->value('corp_short_name');
  198. }
  199. return Api::json(config('code.success'), trans('msg.success'), $user_info);
  200. }
  201. /**
  202. * 退出登录
  203. */
  204. public function loginOut(Request $request){
  205. $request->session()->forget('userInfo');
  206. return redirect('manage');
  207. // return Api::json(config('code.success'), trans('msg.success'));
  208. }
  209. /**
  210. * 下载上传失败的数据(优化)
  211. * 2018-07-02 15;00:00
  212. * @param Request $request
  213. * @return string
  214. */
  215. public function getErrorUpload(Request $request){
  216. try {
  217. $params = $request->all();
  218. $keys = array('corp_id', 'activity_id', 'type');
  219. foreach ($keys as $key) {
  220. if (empty($params[$key])) {
  221. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  222. }
  223. }
  224. $actInfo = ActivityService::getActivityInfo($params['activity_id'], $params['corp_id']);
  225. if (!$actInfo) {
  226. return Api::json(config('code.activity_not_exist'), trans('msg.activity_not_exist'));
  227. }
  228. $data = [];
  229. if($params['type'] == 'user'){
  230. $data = Redis::get(self::USER_UPLOAD_FAIL.$params['activity_id']);
  231. $data = json_decode($data, true);
  232. if(empty($data)) return Api::json(config('code.fail'), '无错误上传数据');
  233. UserService::downloadUserExcel($data);
  234. } elseif($params['type'] == 'question') {
  235. $data = Redis::get(self::QUESTION_UPLOAD_FAIL.$params['activity_id']);
  236. $data = json_decode($data, true);
  237. if(empty($data)) return Api::json(config('code.fail'), '无错误上传数据');
  238. QuestionService::downloadQuestionExcel($data);
  239. }
  240. }catch(\Exception $e) {
  241. return Api::serviceError($e);
  242. }
  243. }
  244. /**
  245. * 获取七牛上传头token
  246. */
  247. public function getUploadToken(Request $request){
  248. try {
  249. $accessKey = env("QINIU_ACCESS_KEY");
  250. $secretKey = env("QINIU_SECRET_KEY");
  251. $auth = new Auth($accessKey, $secretKey);
  252. $bucket = env("QINIU_BUCKET");
  253. // 生成上传Token
  254. $token = $auth->uploadToken($bucket);
  255. $data['token'] = $token;
  256. return Api::json(config('code.success'), trans('msg.success'), $data);
  257. }catch(\Exception $e) {
  258. return Api::serviceError($e);
  259. }
  260. }
  261. /**
  262. * 测试方法
  263. * @param Request $request
  264. * @return string
  265. */
  266. public function test(Request $request){
  267. $str = '韩\u202e乐1552\u202d8333321\u202ccc';
  268. $str = Api::unicode_decode($str);
  269. // $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";
  270. // $str = preg_replace($pattern, '', $str);
  271. // return $str;
  272. // $str_arr = preg_split('/(?<!^)(?!$)/u', $str );
  273. // $str_arr = preg_match_all("/./u", $str, $arr);
  274. // foreach()
  275. return $str;
  276. }
  277. }
  278. ?>