ActivityController.php 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. <?php
  2. /**
  3. * 2018-06-25 韩
  4. */
  5. namespace App\Http\Controllers\brainstorming;
  6. use App\Http\Requests;
  7. use App\Models\Lottery;
  8. use App\Models\LotteryBoxs;
  9. use Illuminate\Http\Request;
  10. use App\Http\Controllers\Controller;
  11. use DB;
  12. use Excel;
  13. use App\Common\Api;
  14. use App\Models\Users;
  15. use App\Models\Configs;
  16. use App\Models\Lotterys;
  17. use App\Models\Prizes;
  18. use App\Models\Departments;
  19. use App\Models\PkRooms;
  20. use App\Models\KnowledgeRecords;
  21. use App\Models\Blockades;
  22. use App\Services\ActivityService;
  23. use App\Services\UserService;
  24. use App\Services\QuestionService;
  25. use Illuminate\Support\Facades\Redis;
  26. use Illuminate\Support\Facades\Log;
  27. class ActivityController extends Controller
  28. {
  29. public function __construct(){
  30. }
  31. const QUESTION_UPLOAD_FAIL = 'bsb_question_upload_fail:';
  32. const USER_UPLOAD_FAIL = 'bsb_user_upload_fail:';
  33. /**
  34. * 新建活动并获取默认配置
  35. * @param Request $request
  36. * @return string
  37. */
  38. public function postAdd(Request $request){
  39. try {
  40. $params = $request->all();
  41. $keys = array('corp_id', 'app_id');
  42. foreach ($keys as $key) {
  43. if (empty($params[$key])) {
  44. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  45. }
  46. }
  47. if(!empty($params['activity_id'])){
  48. $res = ActivityService::getConfigs($params['activity_id'], $params['corp_id']);
  49. } else {
  50. $res = ActivityService::addAct($params['corp_id'], $params['app_id']);
  51. }
  52. return Api::json($res['code'], $res['msg'], $res['data']);
  53. }catch(\Exception $e) {
  54. return Api::serviceError($e);
  55. }
  56. }
  57. /**
  58. * 保存活动
  59. * 2018-06-20 10:25:00
  60. * @param Request $request
  61. * @return string
  62. */
  63. public function postSave(Request $request){
  64. try {
  65. $params = $request->all();
  66. $keys = array('activity_id', 'corp_id', 'app_id', 'title', 'start_time', 'end_time');
  67. foreach ($keys as $key) {
  68. if (empty($params[$key])) {
  69. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  70. }
  71. }
  72. $res = ActivityService::saveActivity($params);
  73. return Api::json($res['code'], $res['msg'], $res['data']);
  74. }catch(\Exception $e) {
  75. return Api::serviceError($e);
  76. }
  77. }
  78. /**
  79. * 暂停活动
  80. * @param Request $request
  81. * @return string
  82. */
  83. public function postPause(Request $request){
  84. try {
  85. $params = $request->all();
  86. $keys = array('activity_id', 'corp_id');
  87. foreach ($keys as $key) {
  88. if (empty($params[$key])) {
  89. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  90. }
  91. }
  92. $res = ActivityService::stopActivity($params);
  93. return Api::json($res['code'], $res['msg']);
  94. }catch(\Exception $e) {
  95. return Api::serviceError($e);
  96. }
  97. }
  98. /**
  99. * 活动下架(删除)
  100. * @param Request $request
  101. * @return string
  102. */
  103. public function postDelete(Request $request){
  104. try {
  105. $params = $request->all();
  106. $keys = array('activity_id');
  107. foreach ($keys as $key) {
  108. if (empty($params[$key])) {
  109. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  110. }
  111. }
  112. $res = ActivityService::changeActStatus($params);
  113. return Api::json($res['code'], $res['msg']);
  114. }catch(\Exception $e) {
  115. return Api::serviceError($e);
  116. }
  117. }
  118. /**
  119. * 活动复制
  120. * @param Request $request
  121. * @return string
  122. */
  123. public function postCopy(Request $request){
  124. try {
  125. $params = $request->all();
  126. $keys = array('activity_id');
  127. foreach ($keys as $key) {
  128. if (empty($params[$key])) {
  129. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  130. }
  131. }
  132. $res = ActivityService::copyActivity($params);
  133. if ($res) {
  134. $data['activity_id'] = $res;
  135. return Api::json(config('code.success'), trans('msg.success'), $data);
  136. } else {
  137. return Api::json(config('code.fail'), trans('msg.fail'));
  138. }
  139. }catch(\Exception $e) {
  140. return Api::serviceError($e);
  141. }
  142. }
  143. /**
  144. * 下载上传失败的数据
  145. * @param Request $request
  146. * @return string
  147. */
  148. public function getErrorUpload(Request $request){
  149. try {
  150. $params = $request->all();
  151. $keys = array('corp_id', 'activity_id', 'type');
  152. foreach ($keys as $key) {
  153. if (empty($params[$key])) {
  154. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  155. }
  156. }
  157. $actInfo = ActivityService::getActivityInfo($params['activity_id'], $params['corp_id']);
  158. if (!$actInfo) {
  159. return Api::json(config('code.activity_not_exist'), trans('msg.activity_not_exist'));
  160. }
  161. $data = [];
  162. if($params['type'] == 'user'){
  163. $data = Redis::get(self::USER_UPLOAD_FAIL.$params['activity_id']);
  164. $data = json_decode($data, true);
  165. if(empty($data)) return Api::json(config('code.fail'), '无错误上传数据');
  166. UserService::downloadUserExcel($data);
  167. } elseif($params['type'] == 'question') {
  168. $data = Redis::get(self::QUESTION_UPLOAD_FAIL.$params['activity_id']);
  169. $data = json_decode($data, true);
  170. if(empty($data)) return Api::json(config('code.fail'), '无错误上传数据');
  171. QuestionService::downloadQuestionExcel($data);
  172. }
  173. }catch(\Exception $e) {
  174. return Api::serviceError($e);
  175. }
  176. }
  177. /**
  178. * 活动看板
  179. */
  180. public function getBoard(Request $request){
  181. $params = $request->all();
  182. $activity_id = $params['activity_id'];
  183. if(empty($activity_id) || !isset($activity_id)){
  184. return Api::json(config('code.params_error'), trans('msg.params_error'));
  185. }
  186. //概况
  187. $data = [];
  188. $data['time'] = date('Y-m-d H:i:s');
  189. $data['users']['total'] = Users::where('activity_id', $activity_id)->where('status', 1)->count();
  190. $data['users']['join'] = Users::where('activity_id', $activity_id)->where('status', 1)->where('platform', '!=', NULL)->count();
  191. $data['users']['is_blockade_success'] = Users::where('activity_id', $activity_id)->where('status', 1)->where('is_blockade_success', 1)->count();
  192. $userLotterys = Lotterys::where('activity_id', $activity_id)->groupBy('user_id')->get();
  193. $data['users']['prize'] = count($userLotterys);
  194. $data['users']['blockades'] = Blockades::where('activity_id', $activity_id)->count();
  195. $data['users']['user_online'] = intval(Redis::get('bs_online:'.$activity_id));
  196. //奖品情况
  197. $data['prize'] = Prizes::where('activity_id', $activity_id)->get()->toArray();
  198. $data['prize_counts'] = 0;
  199. $data['day_counts'] = 0;
  200. $data['total_counts'] = 0;
  201. foreach($data['prize'] as $k=>$v){
  202. $key = 'bs_prize_count:'.$v['prize_id'].':'.date('Ymd');
  203. if(Redis::exists($key)){
  204. $data['prize'][$k]['day_count'] = $v['prize_day_rule']- Redis::get($key);
  205. } else {
  206. $data['prize'][$k]['day_count'] = 0;
  207. }
  208. $data['prize_counts'] += $v['prize_count'];
  209. $data['day_counts'] += $data['prize'][$k]['day_count'];
  210. $data['total_counts'] += $v['prize_grant_count'];
  211. $data['prize'][$k]['lottery_name'] = LotteryBoxs::where('activity_id', $activity_id)->where('lottery_level', $v['lottery_level'])->value('lottery_name');
  212. }
  213. //知识币情况
  214. $boxConfigs = LotteryBoxs::where('activity_id', $activity_id)->where('status', 1)->get();
  215. $data['user_knowledge_success'] = 0;
  216. $data['prize_count'] = 0;
  217. $data['money'] = [];
  218. foreach($boxConfigs as $k=>$v){
  219. $data['money'][$v['open_rule']]['user_success'] = Users::where('activity_id', $activity_id)->where('status', 1)->where('knowledge_money', '>=', $v['open_rule'])->count();
  220. $data['money'][$v['open_rule']]['prize'] = Lotterys::where('activity_id', $activity_id)->where('lottery_level', $v['lottery_level'])->count();
  221. if($data['money'][$v['open_rule']]['user_success'] != 0){
  222. $data['money'][$v['open_rule']]['proportion'] = sprintf("%.2f", $data['money'][$v['open_rule']]['prize'] / $data['money'][$v['open_rule']]['user_success']);
  223. } else {
  224. $data['money'][$v['open_rule']]['proportion'] = 0;
  225. }
  226. $data['prize_count'] += $data['money'][$v['open_rule']]['prize']; //总抽奖人数
  227. }
  228. if(!empty($data['money'])){
  229. ksort($data['money']);
  230. }
  231. $data['user_knowledge_success'] = reset($data['money'])['user_success']; //知识币完成人数
  232. //个人排行
  233. $pkData = Redis::zRevrangebyscore('bs_top:users:pk:'.$params['activity_id'],"+inf", "-inf");
  234. $topUserInfos = Users::where('activity_id', $params['activity_id'])->where('status', 1)->get()->toArray();
  235. if(!empty($pkData)) {
  236. $userDatas = [];
  237. foreach($topUserInfos as $k=>$v){
  238. $userDatas[$v['user_id']] = $v;
  239. }
  240. foreach ($pkData as $k => $v) {
  241. $pkData[$k] = $userDatas[$v];
  242. }
  243. $data['top']['user']['pk'] = json_decode(json_encode($pkData), true);
  244. } else {
  245. $data['top']['user']['pk'] = [];
  246. }
  247. $sql = Users::where('activity_id', $activity_id)->where('status', 1)->orderByDesc('knowledge_money')->limit(100);
  248. $data['top']['user']['knowledge_money'] = $sql->get();
  249. $levelStarConfig = Configs::where('activity_id', $params['activity_id'])->value('level_star_config');
  250. $levelStarConfig = json_decode($levelStarConfig, true);
  251. $departmentInfo = Departments::where('activity_id', $params['activity_id'])->pluck('department_name', 'department_id')->toArray();
  252. if(!empty($data['top']['user']['knowledge_money'])) {
  253. foreach ($data['top']['user']['knowledge_money'] as $k=>$v) {
  254. $data['top']['user']['knowledge_money'][$k]['department_name'] = $v['department_id'] == 0 ? '' : $departmentInfo[$v['department_id']];
  255. }
  256. }
  257. if(!empty($data['top']['user']['pk'])) {
  258. foreach ($data['top']['user']['pk'] as $k=>$v) {
  259. $data['top']['user']['pk'][$k]['department_name'] = $v['department_id'] == 0 ? '' : $departmentInfo[$v['department_id']];
  260. $data['top']['user']['pk'][$k]['level_name'] = $levelStarConfig[$v['user_level']]['name'];
  261. }
  262. $data['top']['user']['pk'] = collect($data['top']['user']['pk'])->take(100);
  263. }
  264. //部门排行(参与率)
  265. $deparments = Departments::where('activity_id', $activity_id)->where('status', 1)->get()->toArray();
  266. if($deparments) {
  267. $result = Users::where('activity_id', $params['activity_id'])
  268. ->select(DB::raw('count(user_id) as count, department_id, sum(is_blockade_success) as success_num, sum(knowledge_money) as moneys'))
  269. ->where('status', 1)
  270. ->where('department_id', '!=', 0)
  271. ->groupBy('department_id')
  272. ->get()->toArray();
  273. foreach($result as $k=>$v){
  274. if(isset($departmentInfo[$v['department_id']])) {
  275. $result[$k]['department_name'] = $departmentInfo[$v['department_id']];
  276. } else {
  277. $result[$k]['department_name'] = '';
  278. }
  279. }
  280. //参与率、知识币、平均知识币
  281. $departmentRes = collect($result)->reduce(function($departmentRes, $item){
  282. if($item['count'] != 0) {
  283. $departmentRes['department_join'][$item["department_name"]] = sprintf("%.2f", $item["success_num"] / $item["count"]);
  284. $departmentRes['department_knowledge'][$item["department_name"]]['avg'] = round($item['moneys']/$item["count"]);
  285. } else {
  286. $departmentRes['department_join'][$item["department_name"]] = 0;
  287. $departmentRes['department_knowledge'][$item["department_name"]]['avg'] = $item['moneys'];
  288. }
  289. $departmentRes['department_knowledge'][$item["department_name"]]['count'] = $item['moneys'];
  290. return $departmentRes;
  291. });
  292. $data['top']['department_knowledge'] = $departmentRes['department_knowledge'];
  293. $data['top']['department_join'] = $departmentRes['department_join'];
  294. arsort($data['top']['department_knowledge']);
  295. arsort($data['top']['department_join']);
  296. }
  297. //游戏数据
  298. $data['must']['total'] = Blockades::where('activity_id', $activity_id)->where('is_first', 1)->count();
  299. $data['must']['question_count'] = Blockades::where('activity_id', $activity_id)->where('is_first', 1)->sum('question_count');
  300. $must_success = Blockades::where('activity_id', $activity_id)->where('is_first', 1)->where('is_success', 1)->count();
  301. if($data['must']['total'] != 0) {
  302. $data['must']['success'] = sprintf("%.2f", $must_success / $data['must']['total']);
  303. } else {
  304. $data['must']['success'] = 0;
  305. }
  306. $data['blockade']['total'] = Blockades::where('activity_id', $activity_id)->where('is_first', 0)->count();
  307. $data['blockade']['question_count'] = Blockades::where('activity_id', $activity_id)->where('is_first', 0)->sum('question_count');
  308. $blockade_success = Blockades::where('activity_id', $activity_id)->where('is_first', 0)->where('is_success', 1)->count();
  309. if($data['blockade']['total'] != 0) {
  310. $data['blockade']['success'] = sprintf("%.2f", $blockade_success / $data['blockade']['total']);
  311. } else {
  312. $data['blockade']['success'] = 0;
  313. }
  314. $data['pk']['total'] = PkRooms::where('activity_id', $activity_id)->count();
  315. $pk_question_ids = PkRooms::where('activity_id', $activity_id)->pluck('question_ids');
  316. $data['pk']['question_count'] = 0;
  317. foreach($pk_question_ids as $v){
  318. $ids = explode(',', $v);
  319. $data['pk']['question_count'] += count($ids);
  320. }
  321. $data['pk']['unstart'] = PkRooms::where('activity_id', $activity_id)->whereIn('status', [1,2])->count();
  322. $data['pk']['records'] = KnowledgeRecords::where('activity_id', $activity_id)->where('get_mode', 'pk')->where('money', '>', 0)->sum('money');
  323. $data['configs'] = ActivityService::getActivityConfig($activity_id);
  324. $data['activity_id'] = $activity_id;
  325. return view('board', ['data'=>$data]);
  326. }
  327. /**
  328. * 看板下载
  329. */
  330. public function getBoardDownload(Request $request){
  331. set_time_limit(0);
  332. ignore_user_abort(true);
  333. $params = $request->all();
  334. $keys = array('activity_id');
  335. foreach($keys as $key){
  336. if(empty($params[$key])){
  337. return Api::json(config('code.params_error'), trans('params.'.$key).trans('msg.params_error'));
  338. }
  339. }
  340. $activity_info = ActivityService::getActivityInfo($params['activity_id']);
  341. $departmentInfo = Departments::where('activity_id', $params['activity_id'])->pluck('department_name', 'department_id')->toArray();
  342. if($params['type'] == 'join') {
  343. $joins_info = Users::where('activity_id', $params['activity_id'])->where('status', 1)->orderByDesc('knowledge_money')->orderByDesc('blockade_success_time')->get()->toArray();
  344. $data = [];
  345. $res = [];
  346. $joins_info = json_decode(json_encode($joins_info), true);
  347. foreach ($joins_info as $k => $v) {
  348. $res['name'] = $v['name'];
  349. if($v['department_id'] != 0) {
  350. $res['department_name'] = $departmentInfo[$v['department_id']];
  351. } else {
  352. $res['department_name'] = '';
  353. }
  354. if(substr($activity_info['auth_type'],-3) == 'add'){
  355. $res['guid'] = $v['open_id'];
  356. } else {
  357. $res['guid'] = $v['guid'];
  358. }
  359. $res['knowledge_money'] = $v['knowledge_money'];
  360. $res['blockade_success_time'] = empty($v['blockade_success_time'])?'未完成':date('Y-m-d H:i:s', $v['blockade_success_time']);
  361. $data[] = $res;
  362. }
  363. $hands = array('姓名', '部门', '唯一标识', '知识币', '必答完成时间');
  364. array_unshift($data, $hands);
  365. Excel::create('参与情况', function ($excel) use ($data) {
  366. $excel->sheet('join', function ($sheet) use ($data) {
  367. $tot = count($data);
  368. $sheet->setWidth(array(
  369. 'A' => 15,
  370. 'B' => 15,
  371. 'C' => 25,
  372. 'D' => 15,
  373. 'E' => 25,
  374. ))->rows($data)->setFontSize(12);
  375. $sheet->setStyle([
  376. 'font' => [
  377. 'size' => 12,
  378. 'bold' => false,
  379. ]
  380. ])->cells('A1:E1', function($cells){ //设置单元格格式
  381. $cells->setAlignment('center'); //文本对齐方式
  382. $cells->setFontWeight('bold'); //粗体
  383. $cells->setBackground('#92D050'); //底色
  384. })->cells('A1:E'.$tot, function($cells){
  385. $cells->setAlignment('center'); //文本对齐方式
  386. });
  387. });
  388. })->export('xlsx');
  389. } elseif($params['type'] == 'lottery') {
  390. DB::enableQueryLog();
  391. $lotterys = DB::table('bs_user_lotterys')
  392. -> leftJoin('bs_prizes','bs_user_lotterys.prize_id','=','bs_prizes.prize_id')
  393. -> leftJoin('bs_users','bs_user_lotterys.user_id','=','bs_users.user_id')
  394. -> 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')
  395. -> where('bs_user_lotterys.activity_id','=',$params['activity_id'])
  396. -> orderBy('bs_user_lotterys.lottery_time','desc')
  397. -> get()
  398. -> toArray();
  399. Log::info(DB::getQueryLog());
  400. // $lotterys = Lotterys::where('activity_id', $params['activity_id']) ->orderBy('lottery_time', 'desc')->get()->toArray();
  401. $data = [];
  402. $res = [];
  403. $lotterys = json_decode(json_encode($lotterys), true);
  404. foreach ($lotterys as $k => $v) {
  405. // $prizeStatus = Prizes::where('prize_id', $v['prize_id'])->value('status');
  406. if (!$v['prize_id']) {
  407. continue;
  408. }
  409. // $userInfo = Users::where('user_id', $v['user_id'])->first()->toArray();
  410. $res['name'] = $v['name'];
  411. if($v['department_id'] != 0) {
  412. $res['department_name'] = $departmentInfo[$v['department_id']];
  413. } else {
  414. $res['department_name'] = '';
  415. }
  416. $res['guid'] = $v['guid'];
  417. $res['prize_name'] = $v['prize_name'];
  418. $res['lottery_time'] = $v['lottery_time'];
  419. $data[] = $res;
  420. }
  421. $hands = array('姓名', '部门', '手机号码/ID', '获得奖品', '抽奖时间');
  422. array_unshift($data, $hands);
  423. Excel::create('抽奖情况', function ($excel) use ($data) {
  424. $excel->sheet('lottery', function ($sheet) use ($data) {
  425. $tot = count($data);
  426. $sheet->setWidth(array(
  427. 'A' => 15,
  428. 'B' => 15,
  429. 'C' => 25,
  430. 'D' => 15,
  431. 'E' => 25,
  432. ))->rows($data)->setFontSize(12);
  433. $sheet->setStyle([
  434. 'font' => [
  435. 'size' => 12,
  436. 'bold' => false,
  437. ]
  438. ])->cells('A1:E1', function ($cells) { //设置单元格格式
  439. $cells->setAlignment('center'); //文本对齐方式
  440. $cells->setFontWeight('bold'); //粗体
  441. $cells->setBackground('#92D050'); //底色
  442. })->cells('A1:E' . $tot, function ($cells) {
  443. $cells->setAlignment('center'); //文本对齐方式
  444. });
  445. });
  446. })->export('xlsx');
  447. } elseif ($params['type'] == 'pk'){
  448. // $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");
  449. // $res = json_decode(json_encode($result), true);
  450. ini_set('memory_limit', '256M');
  451. set_time_limit(0);
  452. //获取配置信息
  453. $levelStarConfig = Configs::where('activity_id', $params['activity_id'])->value('level_star_config');
  454. $levelStarConfig = json_decode($levelStarConfig, true);
  455. $pkData = Redis::zRevrangebyscore('bs_top:users:pk:'.$params['activity_id'],"+inf", "-inf");
  456. $topUserInfos = Users::where('activity_id', $params['activity_id'])->get();
  457. if(!empty($pkData)) {
  458. $userDatas = [];
  459. foreach($topUserInfos as $k=>$v){
  460. $userDatas[$v['user_id']] = $v;
  461. }
  462. foreach ($pkData as $k => $v) {
  463. $pkData[$k] = $userDatas[$v];
  464. }
  465. unset($userDatas);
  466. unset($topUserInfos);
  467. $pkData = collect($pkData)->toArray();
  468. $data = [];
  469. foreach($pkData as $k=>$v){
  470. $data[$k]['name'] = $v['name'];
  471. if($v['department_id'] != 0) {
  472. $departmentName = $departmentInfo[$v['department_id']];
  473. } else {
  474. $departmentName = '';
  475. }
  476. $data[$k]['department_name'] = !$departmentName ? '': $departmentName;
  477. $data[$k]['guid'] = $v['guid'];
  478. $data[$k]['top'] = $k+1;
  479. $data[$k]['level_name'] = $levelStarConfig[$v['user_level']]['name'];
  480. $data[$k]['star_num'] = $v['user_star'];
  481. $data[$k]['pk_total'] = $v['pk_lost_count'] + $v['pk_win_count'] + $v['pk_draw_count'];
  482. $data[$k]['pk_win'] = $v['pk_win_count'];
  483. $data[$k]['pk_lost'] = $v['pk_lost_count'];
  484. $data[$k]['pk_draw'] = $v['pk_draw_count'];
  485. $data[$k]['blockade_success'] = empty($v['is_blockade_success_copy'])?'未参与':'参与';
  486. $data[$k]['knowledge_money'] = $v['knowledge_money'];
  487. }
  488. unset($pkData);
  489. } else {
  490. $data = [];
  491. }
  492. $hands = array('姓名', '部门', '手机号码/ID', '排名', '段位', '星数', 'PK场数', '胜场', '负场', '平局','是否参与','知识币');
  493. array_unshift($data, $hands);
  494. Excel::create('PK情况', function ($excel) use ($data) {
  495. $excel->sheet('lottery', function ($sheet) use ($data) {
  496. $tot = count($data);
  497. $sheet->setWidth(array(
  498. 'A' => 15,
  499. 'B' => 15,
  500. 'C' => 25,
  501. 'D' => 25,
  502. 'E' => 15,
  503. 'F' => 25,
  504. 'G' => 25,
  505. 'H' => 25,
  506. 'I' => 25,
  507. 'J' => 25,
  508. 'K' => 25,
  509. 'L' => 25,
  510. ))->rows($data)->setFontSize(12);
  511. $sheet->setStyle([
  512. 'font' => [
  513. 'size' => 12,
  514. 'bold' => false,
  515. ]
  516. ])->cells('A1:L1', function ($cells) { //设置单元格格式
  517. $cells->setAlignment('center'); //文本对齐方式
  518. $cells->setFontWeight('bold'); //粗体
  519. $cells->setBackground('#92D050'); //底色
  520. })->cells('A1:L' . $tot, function ($cells) {
  521. $cells->setAlignment('center'); //文本对齐方式
  522. });
  523. });
  524. })->export('xlsx');
  525. } else {
  526. return Api::json(config('code.params_error'), trans('msg.params_error'));
  527. }
  528. }
  529. /**
  530. * 下载模板
  531. */
  532. public function getDownloadModel(Request $request){
  533. $params = $request->all();
  534. if(empty($params['type'])){
  535. return Api::json(config('code.params_error'), trans('params.type').trans('msg.params_not_null'));
  536. } else {
  537. if($params['type'] == 'user'){
  538. $url = '/model/人员模板.xlsx'; //人员导入模板
  539. } else {
  540. $url = '/model/题库模板.xlsx'; //题库导入模板
  541. }
  542. header('location:/manage'.$url);
  543. }
  544. }
  545. /**
  546. * 获取获奖情况(发奖使用)
  547. * @param Request $request
  548. * @return string
  549. */
  550. public function getPrizeUsers(Request $request){
  551. $params = $request->all();
  552. $keys = array('activity_id');
  553. foreach($keys as $key){
  554. if(empty($params[$key])){
  555. return Api::json(config('code.params_error'), trans('params.'.$key).trans('msg.params_error'));
  556. }
  557. }
  558. $lotterys = Lotterys::where('activity_id', $params['activity_id'])->orderBy('prize_id', 'desc')->get()->toArray();
  559. $data = [];
  560. $res = [];
  561. $lotterys = json_decode(json_encode($lotterys), true);
  562. foreach ($lotterys as $k => $v) {
  563. $userInfo = Users::where('user_id', $v['user_id'])->first()->toArray();
  564. $res['name'] = $userInfo['name'];
  565. $res['avatar'] = $userInfo['avatar'];
  566. $res['department_name'] = Departments::where('department_id', $userInfo['department_id'])->value('department_name');
  567. $res['prize_name'] = $v['prize_name'];
  568. $res['prize_image'] = $v['prize_image_url'];
  569. $res['blockade_success_time'] = $v['lottery_time'];
  570. $data[] = $res;
  571. }
  572. return view('user_prize', ['data'=>$data]);
  573. }
  574. /**
  575. * 修改PK段位配置
  576. * @param Request $request
  577. * @return string
  578. */
  579. public function postModifyLevelConfig(Request $request){
  580. $params = $request->all();
  581. $keys = array('activity_id', 'level_one', 'level_two', 'level_three', 'level_four', 'level_five', 'level_six');
  582. foreach($keys as $key){
  583. if(empty($params[$key])){
  584. return Api::json(config('code.params_error'), $key .trans('msg.params_error'));
  585. }
  586. }
  587. $res = ActivityService::modifyLevelConfig($params);
  588. return Api::json($res['code'], $res['msg'], $res['data']);
  589. }
  590. }
  591. ?>