TeachersController.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. <?php
  2. namespace App\Http\Controllers\Admin\School;
  3. use App\Exports\School\TeacherExport;
  4. use App\Http\Controllers\Controller;
  5. use App\Jobs\School\ImportTeacherJob;
  6. use App\Repositories\Enums\ModelStatusEnum;
  7. use App\Repositories\Enums\ResponseCodeEnum;
  8. use App\Repositories\Models\Base\Resource;
  9. use App\Repositories\Models\School\LessonTeacher;
  10. use App\Repositories\Models\School\Teacher;
  11. use App\Repositories\Presenters\School\TeacherPresenter;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Validation\Rule;
  14. use Jiannei\Response\Laravel\Support\Facades\Response;
  15. use Prettus\Validator\Contracts\ValidatorInterface;
  16. use App\Contracts\Repositories\School\TeacherRepository;
  17. use App\Repositories\Validators\School\TeacherValidator;
  18. /**
  19. * Class TeachersController.
  20. *
  21. * @package namespace App\Http\Controllers\Mentor;
  22. */
  23. class TeachersController extends Controller
  24. {
  25. /**
  26. * @var TeacherRepository
  27. */
  28. protected $repository;
  29. /**
  30. * @var TeacherValidator
  31. */
  32. protected $validator;
  33. /**
  34. * TeachersController constructor.
  35. *
  36. * @param TeacherRepository $repository
  37. * @param TeacherValidator $validator
  38. */
  39. public function __construct(TeacherRepository $repository, TeacherValidator $validator)
  40. {
  41. parent::__construct();
  42. $this->repository = $repository;
  43. $this->validator = $validator;
  44. }
  45. /**
  46. * 列表
  47. * @param Request $request
  48. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  49. * Author: Mead
  50. */
  51. public function index(Request $request)
  52. {
  53. $lists = $this->repository->paginate($request->get('per_page', self::PAGE_NUM));
  54. return Response::success($lists);
  55. }
  56. /**
  57. * 创建
  58. * @param Request $request
  59. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void
  60. * @throws \Illuminate\Validation\ValidationException
  61. * Author: Mead
  62. */
  63. public function store(Request $request)
  64. {
  65. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE));
  66. $this->validate($request, [
  67. 'account' => [
  68. Rule::unique('school_teachers')->whereNull('deleted_at'),
  69. Rule::unique('base_admins', 'username')->whereNull('deleted_at'),
  70. ],
  71. 'email' => [
  72. Rule::unique('school_teachers')->whereNull('deleted_at'),
  73. Rule::unique('base_admins')->whereNull('deleted_at')
  74. ]
  75. ]);
  76. $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE)));
  77. if ($request->filled('password')) {
  78. if ($msg = check_password($request->get('password'))) {
  79. return Response::fail($msg);
  80. }
  81. } else {
  82. $data['password'] = $data['account'];
  83. }
  84. if (!$request->filled('department_id')) {
  85. $data['department_id'] = 0;
  86. }
  87. try {
  88. $data['is_register'] = 0;
  89. $model = $this->repository->create($data);
  90. return Response::success($model);
  91. } catch (\Exception $e) {
  92. return $this->error($e);
  93. }
  94. }
  95. /**
  96. * 详情
  97. * @param $id
  98. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  99. * Author: Mead
  100. */
  101. public function show($id)
  102. {
  103. $data = $this->repository->find($id);
  104. return Response::success($data);
  105. }
  106. /**
  107. * 更新
  108. * @param Request $request
  109. * @param $id
  110. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void
  111. * @throws \Illuminate\Validation\ValidationException
  112. * Author: Mead
  113. */
  114. public function update(Request $request, $id)
  115. {
  116. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE));
  117. $this->validate($request, [
  118. 'account' => [
  119. Rule::unique('school_teachers')->ignore($id)->whereNull('deleted_at'),
  120. Rule::unique('base_admins', 'username')->ignore($id, 'type_id')->where('type', Teacher::class)->whereNull('deleted_at'),
  121. ],
  122. 'email' => [
  123. Rule::unique('school_teachers')->ignore($id)->whereNull('deleted_at'),
  124. Rule::unique('base_admins')->ignore($id, 'type_id')->where('type', Teacher::class)->whereNull('deleted_at')
  125. ]
  126. ]);
  127. $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE)));
  128. if ($request->filled('password')) {
  129. if ($msg = check_password($request->get('password'))) {
  130. return Response::fail($msg);
  131. }
  132. } else {
  133. unset($data['password']);
  134. }
  135. try {
  136. $model = $this->repository->update($data, $id);
  137. return Response::success($model);
  138. } catch (\Exception $e) {
  139. return $this->error($e);
  140. }
  141. }
  142. /**
  143. * 删除
  144. * @param $id
  145. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  146. * Author: Mead
  147. */
  148. public function destroy($id)
  149. {
  150. $admin = login_admin();
  151. if (!optional($admin)->is_admin) {
  152. return $this->error('您暂无权限操作');
  153. }
  154. try {
  155. $this->repository->skipPresenter()->delete($id);
  156. return Response::success(null, T('successfully delete.'));
  157. } catch (\Exception $exception) {
  158. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  159. }
  160. }
  161. /**
  162. * 批量删除
  163. * @param Request $request
  164. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  165. * Author: Mead
  166. */
  167. public function delete(Request $request)
  168. {
  169. $admin = login_admin();
  170. if (!optional($admin)->is_admin) {
  171. return $this->error('您暂无权限操作');
  172. }
  173. try {
  174. $this->validate($request, [
  175. 'ids' => 'required|array',
  176. ]);
  177. $ids = $request->get('ids');
  178. $this->repository->whereIn('id', $ids)->delete();
  179. return Response::success(null, T('successfully delete.'));
  180. } catch (\Exception $exception) {
  181. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  182. }
  183. }
  184. /**
  185. * 导入
  186. * @param Request $request
  187. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  188. * @throws \Illuminate\Validation\ValidationException
  189. * Author: Mead
  190. */
  191. public function import(Request $request)
  192. {
  193. $this->validate($request, [
  194. 'id' => 'required|integer'
  195. ]);
  196. $resource = Resource::query()->where('id', $request->get('id'))->first();
  197. if (!$resource) {
  198. return $this->errorFail();
  199. }
  200. $this->dispatch(new ImportTeacherJob($resource['disk'], $resource['path']));
  201. return Response::success(null, '正在导入,请稍后');
  202. }
  203. /**
  204. * 选项
  205. * @param Request $request
  206. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  207. * Author: Mead
  208. */
  209. public function selectOptions(Request $request)
  210. {
  211. $data = $this->repository->skipPresenter()->all(['name', 'id', 'account']);
  212. return Response::success($data);
  213. }
  214. /**
  215. * 导出数据
  216. * Author: Mead
  217. */
  218. public function export(Request $request)
  219. {
  220. $this->validate($request, [
  221. 'ids' => 'required|array',
  222. 'fields' => 'sometimes|array',
  223. 'type' => 'required'
  224. ]);
  225. $ids = $request->get('ids');
  226. $name = time();
  227. return (new TeacherExport($request->get('fields', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))->forIds($ids)->download($name . '.xlsx', null, [
  228. 'Access-Control-Allow-Origin' => '*',
  229. 'Access-Control-Allow-Methods' => '*',
  230. 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With',
  231. 'Access-Control-Expose-Headers' => 'Content-Disposition',
  232. 'Content-type' => 'application/octet-stream',
  233. 'Content-Disposition' => 'attachment; filename=' . $name . '.xlsx',
  234. ]);
  235. }
  236. /**
  237. * 暂停
  238. * @param Request $request
  239. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  240. * @throws \Illuminate\Validation\ValidationException
  241. */
  242. public function pause(Request $request)
  243. {
  244. $this->validate($request, [
  245. 'id' => 'required|integer',
  246. 'type' => 'sometimes|nullable|integer',
  247. ]);
  248. $status = ModelStatusEnum::PAUSE;
  249. if ($request->get('type')) {
  250. $status = ModelStatusEnum::OK;
  251. }
  252. $re = Teacher::query()->where('id', $request->get('id'))->update(['status' => $status]);
  253. if ($re) {
  254. return Response::success([]);
  255. }
  256. return $this->error('操作失败');
  257. }
  258. }