StudentsController.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <?php
  2. namespace App\Http\Controllers\Admin\School;
  3. use App\Exports\School\StudentExport;
  4. use App\Http\Controllers\Controller;
  5. use App\Jobs\School\ImportStudentJob;
  6. use App\Repositories\Models\Base\Admin;
  7. use App\Repositories\Models\Base\Resource;
  8. use App\Repositories\Models\School\Student;
  9. use App\Repositories\Models\School\Teacher;
  10. use App\Services\School\StudentService;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Validation\Rule;
  13. use Jiannei\Response\Laravel\Support\Facades\Response;
  14. /**
  15. * 学生管理
  16. *
  17. * @package namespace App\Http\Controllers\School;
  18. */
  19. class StudentsController extends Controller
  20. {
  21. protected $service;
  22. public function __construct(StudentService $service)
  23. {
  24. parent::__construct();
  25. $this->service = $service;
  26. }
  27. /**
  28. * 列表
  29. * @param Request $request
  30. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  31. * @throws \Prettus\Repository\Exceptions\RepositoryException
  32. */
  33. public function index(Request $request)
  34. {
  35. $data = $this->service->handleList($request);
  36. return $this->response->success($data);
  37. }
  38. /**
  39. * 新增
  40. * @param Request $request
  41. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  42. * @throws \Illuminate\Validation\ValidationException
  43. * @throws \Prettus\Validator\Exceptions\ValidatorException
  44. */
  45. public function store(Request $request)
  46. {
  47. $data = $this->validateData($request, [
  48. 'name' => 'required',
  49. 'account' => ['required', Rule::unique('school_students')->whereNull('deleted_at')],
  50. 'password' => 'sometimes|min:6',
  51. 'headimg' => 'sometimes',
  52. 'sex' => 'sometimes',
  53. 'mobile' => 'nullable|mobile',
  54. 'email' => 'sometimes|email',
  55. 'grade_id' => 'required|integer',
  56. 'year' => 'nullable',
  57. 'status' => 'required',
  58. ], [
  59. 'name' => '姓名',
  60. 'account' => '学号',
  61. 'password' => '密码',
  62. 'headimg' => '头像',
  63. 'sex' => '性别',
  64. 'mobile' => '手机号',
  65. 'email' => '邮箱',
  66. 'grade_id' => '班级',
  67. 'year' => '年级',
  68. 'status' => '状态'
  69. ]);
  70. $data['password'] = rk($data['account']);
  71. $model = $this->service->handleStore($data);
  72. return $this->response->created($model, '创建成功');
  73. }
  74. /**
  75. * 详情
  76. * @param Request $request
  77. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  78. * @throws \Illuminate\Validation\ValidationException
  79. */
  80. public function show(Request $request)
  81. {
  82. $this->validate($request, ['id' => 'required|integer']);
  83. $model = $this->service->handleProfile($request->get('id'));
  84. return $this->response->success($model);
  85. }
  86. /**
  87. * 编辑
  88. * @param Request $request
  89. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  90. * @throws \Illuminate\Validation\ValidationException
  91. * @throws \Prettus\Validator\Exceptions\ValidatorException
  92. */
  93. public function update(Request $request)
  94. {
  95. $data = $this->validateData($request, [
  96. 'id' => 'required|integer',
  97. 'name' => 'required',
  98. 'account' => [
  99. 'required',
  100. Rule::unique('school_students')->ignore($request->get('id', 0))->whereNull('deleted_at')
  101. ],
  102. 'headimg' => 'sometimes',
  103. 'sex' => 'sometimes',
  104. 'mobile' => 'nullable|mobile',
  105. 'email' => 'sometimes|email',
  106. 'grade_id' => 'sometimes|integer',
  107. 'year' => 'nullable',
  108. 'status' => 'required',
  109. ], [
  110. 'name' => '姓名',
  111. 'account' => '学号',
  112. 'headimg' => '头像',
  113. 'sex' => '性别',
  114. 'mobile' => '手机号',
  115. 'email' => '邮箱',
  116. 'grade_id' => '班级',
  117. 'year' => '年级',
  118. 'status' => '状态'
  119. ]);
  120. $model = $this->service->handleUpdate($data);
  121. return $this->response->success($model, '创建成功');
  122. }
  123. /**
  124. * 删除
  125. * @param Request $request
  126. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  127. * @throws \Illuminate\Validation\ValidationException
  128. * @throws \Prettus\Validator\Exceptions\ValidatorException
  129. */
  130. public function destroy(Request $request)
  131. {
  132. $this->validate($request, ['id' => 'required|integer']);
  133. $re = $this->service->handleDelete($request->get('id'));
  134. if ($re) {
  135. return $this->response->ok('删除成功');
  136. }
  137. return $this->response->fail('删除失败');
  138. }
  139. /**
  140. * 批量删除
  141. * @param Request $request
  142. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  143. * @throws \Illuminate\Validation\ValidationException
  144. * @throws \Prettus\Validator\Exceptions\ValidatorException
  145. */
  146. public function batchDelete(Request $request)
  147. {
  148. $ids = $this->validateData($request, ['ids' => 'required|array']);
  149. $re = $this->service->handleBatchDelete($ids);
  150. if ($re) {
  151. return $this->response->ok('删除成功');
  152. }
  153. return $this->response->fail('删除失败');
  154. }
  155. /**
  156. * 选项
  157. * @must
  158. * @param Request $request
  159. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  160. * @throws \Prettus\Repository\Exceptions\RepositoryException
  161. */
  162. public function selectOptions(Request $request)
  163. {
  164. $lists = $this->service->handleSelectOptions($request);
  165. return $this->response->success($lists);
  166. }
  167. /**
  168. * 导入
  169. * @param Request $request
  170. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  171. * @throws \Illuminate\Validation\ValidationException
  172. * Author: Mead
  173. */
  174. public function importStudents(Request $request)
  175. {
  176. $this->validate($request, [
  177. 'id' => 'required|integer'
  178. ]);
  179. $resource = Resource::query()->where('id', $request->get('id'))->first();
  180. if (!$resource) {
  181. return $this->errorFail();
  182. }
  183. $this->dispatch(new ImportStudentJob($resource, login_admin_id()));
  184. return Response::success(null, '正在导入,请稍后');
  185. }
  186. /**
  187. * 导出数据
  188. * Author: Mead
  189. */
  190. public function exportStudents(Request $request)
  191. {
  192. $ids = $this->service->handleIds($request);
  193. $name = time();
  194. return (new StudentExport($ids, $request->get('fields', false)))->download($name . '.xlsx', null, [
  195. 'Access-Control-Allow-Origin' => '*',
  196. 'Access-Control-Allow-Methods' => '*',
  197. 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With',
  198. 'Access-Control-Expose-Headers' => 'Content-Disposition',
  199. 'Content-type' => 'application/octet-stream',
  200. 'Content-Disposition' => 'attachment; filename=' . $name . '.xlsx',
  201. ]);
  202. }
  203. /**
  204. * 批量修改状态
  205. * @param Request $request
  206. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  207. * @throws \Illuminate\Validation\ValidationException
  208. */
  209. public function updateStatus(Request $request)
  210. {
  211. $data = $this->validateData($request, [
  212. 'ids' => 'required|array',
  213. 'status' => 'required|integer',
  214. ], [
  215. 'status' => '状态'
  216. ]);
  217. $re = Student::query()->whereIn('id', $data['ids'])->update(['status' => $data['status']]);
  218. Admin::query()->whereIn('id', Teacher::query()->where('id', $data['ids'])->pluck('admin_id'))->update(['status' => $data['status']]);
  219. if ($re) {
  220. return Response::success([]);
  221. }
  222. return $this->error('操作失败');
  223. }
  224. /**
  225. * 重置密码
  226. * @param Request $request
  227. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  228. * @throws \Illuminate\Validation\ValidationException
  229. */
  230. public function changePassword(Request $request)
  231. {
  232. $data = $this->validateData($request, [
  233. 'id' => 'required|integer',
  234. 'password' => 'required|password_level',
  235. ]);
  236. $id = $request->get('id');
  237. $model = Student::query()->find($id);
  238. if (!$model) {
  239. return Response::fail('找不到该用户');
  240. }
  241. $model->password = rk($data['password']);
  242. $model->save();
  243. return Response::success([]);
  244. }
  245. }