Train.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <?php
  2. namespace app\api\controller;
  3. use app\admin\library\DingTalk;
  4. use app\admin\service\train\TrainService;
  5. use app\common\controller\Api;
  6. /**
  7. * 培训相关
  8. */
  9. class Train extends Api
  10. {
  11. protected $noNeedLogin = '*';
  12. public function _initialize()
  13. {
  14. // 解决跨域
  15. if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
  16. $this->success('同意自定义请求头');
  17. }
  18. parent::_initialize();
  19. }
  20. /**
  21. * 未完成考试列表
  22. * @param TrainService $service
  23. */
  24. public function getUndoneExam(TrainService $service)
  25. {
  26. // 验证
  27. $params = $this->request->param();
  28. $res = $this->validate($params,['phone' => 'require']);
  29. if($res !== true){
  30. $this->error($res);
  31. }
  32. // 获取数据
  33. $data = $service->getUndoneExam($params['phone']);
  34. $this->success('ok',$data);
  35. }
  36. /**
  37. * 及格考试列表
  38. * @param TrainService $service
  39. */
  40. public function getQualifiedExam(TrainService $service)
  41. {
  42. // 验证
  43. $params = $this->request->param();
  44. $res = $this->validate($params,['phone' => 'require']);
  45. if($res !== true){
  46. $this->error($res);
  47. }
  48. // 获取数据
  49. $data = $service->getQualifiedExam($params['phone']);
  50. $this->success('ok',$data);
  51. }
  52. /**
  53. * 不格考试列表
  54. * @param TrainService $service
  55. */
  56. public function getUnqualifiedExam(TrainService $service)
  57. {
  58. // 验证
  59. $params = $this->request->param();
  60. $res = $this->validate($params,['phone' => 'require']);
  61. if($res !== true){
  62. $this->error($res);
  63. }
  64. // 获取数据
  65. $data = $service->getQualifiedExam($params['phone'], true);
  66. $this->success('ok',$data);
  67. }
  68. /**
  69. * 获取缺考的考试
  70. * @param TrainService $service
  71. */
  72. public function getMissedExam(TrainService $service)
  73. {
  74. // 验证
  75. $params = $this->request->param();
  76. $res = $this->validate($params,['phone' => 'require']);
  77. if($res !== true){
  78. $this->error($res);
  79. }
  80. // 获取数据
  81. $data = $service->getMissedExam($params['phone']);
  82. $this->success('ok',$data);
  83. }
  84. /**
  85. * 获取考试的考题
  86. * @param TrainService $service
  87. */
  88. public function getExamQuestions(TrainService $service)
  89. {
  90. // 验证
  91. $params = $this->request->param();
  92. $res = $this->validate($params,['exam_id' => 'require']);
  93. if($res !== true){
  94. $this->error($res);
  95. }
  96. // 获取数据
  97. $exam = $service->getExam($params['exam_id']);
  98. $questions = $service->getExamQuestions($params['exam_id']);
  99. $data = [
  100. 'exam_id' => $exam['id'],
  101. 'title' => $exam['title'],
  102. 'duration' => $exam['duration'],
  103. 'questions' => $questions
  104. ];
  105. $this->success('ok',$data);
  106. }
  107. /**
  108. * 开始考试
  109. * @param TrainService $service
  110. */
  111. public function startExam(TrainService $service)
  112. {
  113. // 验证
  114. $params = $this->request->param();
  115. $res = $this->validate($params,[
  116. 'result_id' => 'require',
  117. ]);
  118. if($res !== true){
  119. $this->error($res);
  120. }
  121. $result = $service->getResult($params['result_id']);
  122. if($result['status'] !== 0){
  123. $this->error('当前状态无法开始考试');
  124. }
  125. $exam = $service->getExam($result['exam_id']);
  126. $now = $this->request->time();
  127. if($now > strtotime($exam['end_time'])){
  128. $this->error('考试已截止');
  129. }
  130. // 获取数据
  131. $data = $service->startExam($params['result_id']);
  132. $this->success('ok',$data);
  133. }
  134. /**
  135. * 重考
  136. * @param TrainService $service
  137. */
  138. public function retakeExam(TrainService $service)
  139. {
  140. // 验证
  141. $params = $this->request->param();
  142. $res = $this->validate($params,[
  143. 'result_id' => 'require',
  144. ]);
  145. if($res !== true){
  146. $this->error($res);
  147. }
  148. $result = $service->getResult($params['result_id']);
  149. if($result['status'] !== 2){
  150. $this->error('当前状态无法开始重考');
  151. }
  152. $exam = $service->getExam($result['exam_id']);
  153. $now = $this->request->time();
  154. if($now > strtotime($exam['end_time'])){
  155. $this->error('考试已截止');
  156. }
  157. // 获取数据
  158. $data = $service->retakeExam($params['result_id']);
  159. $this->success('ok',$data);
  160. }
  161. /**
  162. * 提交考试
  163. * @param TrainService $service
  164. */
  165. public function subExam(TrainService $service)
  166. {
  167. // 验证
  168. $params = $this->request->param();
  169. $res = $this->validate($params, [
  170. 'result_id' => 'require',
  171. 'record' => 'require',
  172. ]);
  173. if($res !== true){
  174. $this->error($res);
  175. }
  176. // 考试状态验证
  177. $result = $service->getResult($params['result_id']);
  178. $exam = $service->getExam($result['exam_id']);
  179. if($result['status'] !== 1){
  180. $this->error('当前状态无法提交考试');
  181. }
  182. // 考试是否超时
  183. // if((time() - strtotime($result['start_time'])) > ($exam['duration'] * 60)){
  184. // $this->error('已超出答题时长无法提交。开始答题时间:' . $result['start_time']);
  185. // }
  186. // 考试是否截止
  187. $now = $this->request->time();
  188. if($now > strtotime($exam['end_time'])){
  189. $this->error('考试已截止');
  190. }
  191. // 提交
  192. $res = $service->subExam($params['result_id'], $params['record']);
  193. if(!$res){
  194. $this->error($service->getError());
  195. }
  196. $this->success('ok',$res);
  197. }
  198. /**
  199. * 获取剩余考试时间
  200. * @param TrainService $service
  201. */
  202. public function getRemainingTime(TrainService $service)
  203. {
  204. // 验证
  205. $params = $this->request->param();
  206. $res = $this->validate($params, ['result_id' => 'require']);
  207. if($res !== true){
  208. $this->error($res);
  209. }
  210. $data = $service->getRemainingTime($params['result_id']);
  211. $this->success('ok',[
  212. 'time' => $data
  213. ]);
  214. }
  215. /**
  216. * 获取用户详情
  217. * @param DingTalk $dingTalkService
  218. */
  219. public function getUserDetail(DingTalk $dingTalkService)
  220. {
  221. // 验证
  222. $params = $this->request->param();
  223. $res = $this->validate($params, ['code' => 'require']);
  224. if($res !== true){
  225. $this->error($res);
  226. }
  227. // 获取access_token
  228. $token = $dingTalkService->getToken();
  229. if(!$token){
  230. $this->error('获取access_token失败:' . $dingTalkService->getError());
  231. }
  232. // 获取用户userid
  233. $user_id = $dingTalkService->getUserId($params['code'], $token);
  234. if(!$user_id){
  235. $this->error('获取用户userid失败:'. $dingTalkService->getError());
  236. }
  237. // 获取用户详情
  238. $detail = $dingTalkService->getUserDetail($user_id, $token);
  239. if(!$detail){
  240. $this->error('获取用户详情失败:'. $dingTalkService->getError());
  241. }
  242. $this->success('ok',$detail);
  243. }
  244. }