QuestionController.php 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <?php
  2. namespace App\Http\Controllers\brainstorming;
  3. use App\Models\Configs;
  4. use Illuminate\Http\Request;
  5. use App\Http\Requests;
  6. use App\Http\Controllers\Controller;
  7. use App\Common\Api;
  8. use App\Models\Questions;
  9. use DB;
  10. use Excel;
  11. use Storage;
  12. use Illuminate\Support\Facades\Redis;
  13. use App\Services\ActivityService;
  14. use App\Services\QuestionService;
  15. class QuestionController extends Controller
  16. {
  17. public function __construct(){
  18. //加载中间键
  19. // $this->middleware('CheckLogin');
  20. // $this->middleware('Logs');
  21. // $this->middleware('CacheClear');
  22. }
  23. const QUESTION_UPLOAD = 1;
  24. const QUESTION_UPLOAD_KEY = 'bsb_question_upload:'; //题目上传到redis的key
  25. /**
  26. * 活动配置——题库上传(题目)
  27. */
  28. public function postUpload(Request $request){
  29. try {
  30. $params = $request->all();
  31. $keys = array('activity_id', 'corp_id', 'category_name');
  32. foreach ($keys as $key) {
  33. if (empty($params[$key])) {
  34. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  35. }
  36. }
  37. if ($request->isMethod("post")) {
  38. $activity_info = ActivityService::getActivityInfo($params['activity_id'], $params['corp_id']);
  39. if (!$activity_info) {
  40. return Api::json(config('code.activity_not_exist'), trans('msg.activity_not_exist'));
  41. }
  42. if (!empty($_FILES['question'])) {
  43. $filePath = $_FILES['question']['tmp_name'];
  44. Excel::load($filePath, function ($reader) {
  45. $reader = $reader->getSheet(0);
  46. $res = $reader->toArray();
  47. //去掉无用表头
  48. foreach ($res as $k=>$v) {
  49. unset($res[$k]);
  50. if(Api::trimAll($v[0]) == '题目标题' && Api::trimAll($v['1']) == 'A选项' && Api::trimAll($v[2]) == 'B选项' && Api::trimAll($v[3]) == 'C选项' && Api::trimAll($v['4']) == 'D选项' && Api::trimAll($v[5]) == '答案'){
  51. break;
  52. }
  53. }
  54. //去掉excel表格的空数据
  55. $res = collect($res)->filter(function($value){
  56. return !is_null($value[0]) || !is_null($value[1]) || !is_null($value[2]) || !is_null($value[3]) || !is_null($value[4]) || !is_null($value[5]);
  57. });
  58. //如果无正确数据。则返回上传文件为空
  59. if (empty($res)) {
  60. print_r(Api::json(config('code.fail'), trans('msg.question_not_exist')));
  61. exit;
  62. }
  63. //去除空格和不可见unicode编码
  64. $result = [];
  65. foreach($res as $key=>$val){
  66. // $result[$key][0] = Api::trimAll($val[0]);
  67. // $result[$key][1] = Api::trimAll($val[1]);
  68. // $result[$key][2] = Api::trimAll($val[2]);
  69. // $result[$key][3] = Api::trimAll($val[3]);
  70. // $result[$key][4] = Api::trimAll($val[4]);
  71. $result[$key][0] = $val[0];
  72. $result[$key][1] = $val[1];
  73. $result[$key][2] = $val[2];
  74. $result[$key][3] = $val[3];
  75. $result[$key][4] = $val[4];
  76. $result[$key][5] = Api::trimUnicode($val[5]);
  77. }
  78. //存入redis
  79. Redis::set(self::QUESTION_UPLOAD_KEY.$_REQUEST['activity_id'], json_encode($result), 'EX', 3600);
  80. });
  81. //从redis获取数据
  82. $data = Redis::get(self::QUESTION_UPLOAD_KEY.$params['activity_id']);
  83. $result = QuestionService::questionUpload(json_decode($data, true), $params);
  84. if($result['code'] != 0){
  85. return Api::json(config('code.upload_fail'), '上传失败,请检查数据格式是否正确');
  86. }
  87. //文件保存
  88. $newPath = base_path('storage/uploads/' . date('Ymd'));
  89. if (!is_dir($newPath)) {
  90. mkdir($newPath);
  91. }
  92. $file = $request->file('question');
  93. $file->move($newPath, date('His') . $_FILES['question']['name']);
  94. //修改人员上传状态
  95. $query_config['is_question_upload'] = self::QUESTION_UPLOAD;
  96. Configs::where('corp_id', $params['corp_id'])->where('activity_id', $params['activity_id'])->update($query_config);
  97. return Api::json($result['code'], $result['msg'], $result['data']);
  98. } else {
  99. return Api::json(config('code.params_error'), trans('msg.params_not_null'));
  100. }
  101. }
  102. }catch(\Exception $e) {
  103. return Api::serviceError($e);
  104. }
  105. }
  106. /**
  107. * 获取题库内的题目列表
  108. * 2018-06-21 10:00:00
  109. * @param Request $request
  110. * @return string
  111. */
  112. public function getList(Request $request){
  113. try {
  114. $params = $request->all();
  115. $keys = array('category_id', 'activity_id');
  116. foreach ($keys as $key) {
  117. if (empty($params[$key])) {
  118. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  119. }
  120. }
  121. $category_info = QuestionService::getCategoryInfo($params['activity_id'], $params['category_id']);
  122. if (!$category_info) {
  123. return Api::json(config('code.category_not_exist'), trans('msg.category_not_exist'));
  124. }
  125. $keyword = empty($params['keyword']) ? '' : $params['keyword'];
  126. $page_size = empty($params['page_size']) ? 10 : $params['page_size'];
  127. $sql = Questions::where('activity_id', $params['activity_id'])->where('category_id', $params['category_id'])->where('status', 1);
  128. if (!empty($params['keyword'])) {
  129. $sql = $sql->where("question_title", "like", "%" . $keyword . "%");
  130. }
  131. $questions = $sql->orderByDesc('create_time')->paginate($page_size);
  132. $data = Api::page($questions);
  133. //时间戳转换
  134. foreach ($data['data'] as $key => $val) {
  135. $data['data'][$key] = Api::dateFormat($val);
  136. $data['data'][$key]['question_options'] = unserialize($val['question_options']);
  137. }
  138. return Api::json(config('code.success'), trans('msg.success'), $data);
  139. }catch(\Exception $e) {
  140. return Api::serviceError($e);
  141. }
  142. }
  143. /**
  144. * 获取题库列表
  145. * 2018-06-21 10:00:00
  146. * @param Request $request
  147. * @return string
  148. */
  149. public function getCategoryList(Request $request){
  150. try {
  151. $params = $request->all();
  152. $keys = array('corp_id', 'activity_id');
  153. foreach ($keys as $key) {
  154. if (empty($params[$key])) {
  155. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  156. }
  157. }
  158. $res = QuestionService::getCategoryList($params);
  159. return Api::json($res['code'], $res['msg'], $res['data']);
  160. }catch(\Exception $e) {
  161. return Api::serviceError($e);
  162. }
  163. }
  164. /**
  165. * 修改单个题目
  166. * @param Request $request
  167. * @return string
  168. */
  169. public function postModify(Request $request){
  170. try {
  171. $params = $request->all();
  172. $keys = array('corp_id', 'activity_id', 'category_id');
  173. foreach ($keys as $key) {
  174. if (empty($params[$key])) {
  175. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  176. }
  177. }
  178. $res = QuestionService::questionModify($params);
  179. return Api::json($res['code'], $res['msg'], $res['data']);
  180. } catch (\Exception $e) {
  181. return Api::serviceError($e);
  182. }
  183. }
  184. /**
  185. * 修改题库名
  186. * @param Request $request
  187. * @return string
  188. */
  189. public function postCategoryModify(Request $request){
  190. try {
  191. $params = $request->all();
  192. $keys = array('corp_id', 'activity_id', 'category_id', 'category_name');
  193. foreach ($keys as $key) {
  194. if (empty($params[$key])) {
  195. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  196. }
  197. }
  198. $res = QuestionService::saveCategory($params);
  199. return Api::json($res['code'], $res['msg'], $res['data']);
  200. } catch (\Exception $e) {
  201. return Api::serviceError($e);
  202. }
  203. }
  204. /**
  205. * 删除题目
  206. * 2018-06-22 10:24:00
  207. * @param Request $request
  208. * @return string
  209. */
  210. public function postDelete(Request $request){
  211. try {
  212. $params = $request->all();
  213. $keys = array('corp_id', 'activity_id', 'category_id', 'question_id');
  214. foreach ($keys as $key) {
  215. if (empty($params[$key])) {
  216. return Api::json(config('code.params_error'), trans('params.'.$key) . trans('msg.params_not_null'));
  217. }
  218. }
  219. $res = QuestionService::delQuestion($params);
  220. return Api::json($res['code'], $res['msg'], $res['data']);
  221. } catch (\Exception $e) {
  222. return Api::serviceError($e);
  223. }
  224. }
  225. /**
  226. * 添加默认题库
  227. * @param Request $request
  228. * @return string
  229. */
  230. public function postDefault(Request $request){
  231. try {
  232. $params = $request->all();
  233. $keys = array('activity_id');
  234. foreach ($keys as $key) {
  235. if (empty($params[$key])) {
  236. return Api::json(config('code.params_error'), trans('params.' . $key) . trans('msg.params_not_null'));
  237. }
  238. }
  239. $res = QuestionService::addDefault($params['activity_id']);
  240. return Api::json($res['code'], $res['msg'], $res['data']);
  241. } catch (\Exception $e) {
  242. return Api::serviceError($e);
  243. }
  244. }
  245. /**
  246. * 删除题库(只允许在活动未发布状态下删除)
  247. * @param Request $request
  248. * @return string
  249. */
  250. public function postDelCategory(Request $request){
  251. try {
  252. $params = $request->all();
  253. $keys = array('activity_id', 'category_id');
  254. foreach ($keys as $key) {
  255. if (empty($params[$key])) {
  256. return Api::json(config('code.params_error'), $key . trans('msg.params_not_null'));
  257. }
  258. }
  259. $res = QuestionService::delCategory($params['activity_id'], $params['category_id']);
  260. return Api::json($res['code'], $res['msg'], $res['data']);
  261. } catch (\Exception $e) {
  262. return Api::serviceError($e);
  263. }
  264. }
  265. }
  266. ?>