AccountAppliesController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <?php
  2. namespace App\Http\Controllers\Admin\Lab;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Enums\CheckStatusEnum;
  5. use App\Repositories\Enums\ModelStatusEnum;
  6. use App\Repositories\Enums\PermissionEnum;
  7. use App\Repositories\Enums\ResponseCodeEnum;
  8. use App\Repositories\Models\Base\Admin;
  9. use App\Repositories\Models\Base\Department;
  10. use App\Repositories\Models\Lab\AccountApply;
  11. use App\Repositories\Models\School\Teacher;
  12. use Carbon\Carbon;
  13. use Illuminate\Http\Request;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Hash;
  16. use Jiannei\Response\Laravel\Support\Facades\Response;
  17. use Prettus\Validator\Contracts\ValidatorInterface;
  18. use App\Contracts\Repositories\Lab\AccountApplyRepository;
  19. use App\Repositories\Validators\Lab\AccountApplyValidator;
  20. /**
  21. * Class AccountAppliesController.
  22. *
  23. * @package namespace App\Http\Controllers\Lab;
  24. */
  25. class AccountAppliesController extends Controller
  26. {
  27. /**
  28. * @var AccountApplyRepository
  29. */
  30. protected $repository;
  31. /**
  32. * @var AccountApplyValidator
  33. */
  34. protected $validator;
  35. /**
  36. * AccountAppliesController constructor.
  37. *
  38. * @param AccountApplyRepository $repository
  39. * @param AccountApplyValidator $validator
  40. */
  41. public function __construct(AccountApplyRepository $repository, AccountApplyValidator $validator)
  42. {
  43. parent::__construct();
  44. $this->repository = $repository;
  45. $this->validator = $validator;
  46. }
  47. /**
  48. * 列表
  49. * @param Request $request
  50. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  51. * Author: Mead
  52. */
  53. public function index(Request $request)
  54. {
  55. $lists = $this->repository->paginate($request->get('per_page', self::PAGE_NUM));
  56. return Response::success($lists);
  57. }
  58. /**
  59. * 排班列表
  60. * @param Request $request
  61. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  62. */
  63. public function lists(Request $request)
  64. {
  65. $lists = $this->repository->all();
  66. return Response::success($lists);
  67. }
  68. /**
  69. * 添加
  70. * @param Request $request
  71. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource|void
  72. * @throws \Illuminate\Validation\ValidationException
  73. * Author: Mead
  74. */
  75. public function store(Request $request)
  76. {
  77. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE));
  78. $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE)));
  79. if ($msg = check_password($data['password'])) {
  80. return $this->error($msg);
  81. }
  82. $model = AccountApply::query()->where('account', $data['account'])->first();
  83. if ($model) {
  84. if ($model->check_status == CheckStatusEnum::WAIT) {
  85. return $this->error('您已经提交申请,请耐心等待管理员审核。');
  86. }
  87. if ($model->check_status == CheckStatusEnum::OK) {
  88. return $this->error('您已经审核通过.');
  89. }
  90. if ($model->check_status == CheckStatusEnum::ERROR) {
  91. return $this->error('您的申请审核未通过,原因:' . $model->check_result);
  92. }
  93. }
  94. if (Admin::query()->where('username', $data['account'])->exists()) {
  95. return $this->error('该账号已存在');
  96. }
  97. $data['status'] = ModelStatusEnum::PAUSE;
  98. try {
  99. $model = AccountApply::query()->create($data);
  100. return Response::success([]);
  101. } catch (\Exception $e) {
  102. return $this->error($e);
  103. }
  104. }
  105. /**
  106. * 详情
  107. * @param $id
  108. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  109. * Author: Mead
  110. */
  111. public function show($id)
  112. {
  113. $data = $this->repository->find($id);
  114. return Response::success($data);
  115. }
  116. /**
  117. * 更新
  118. * @param Request $request
  119. * @param $id
  120. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  121. * @throws \Illuminate\Validation\ValidationException
  122. * Author: Mead
  123. */
  124. public function update(Request $request, $id)
  125. {
  126. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_UPDATE));
  127. $check_status = AccountApply::query()->where('id', $id)->value('check_status');
  128. if ($check_status != CheckStatusEnum::WAIT) {
  129. return $this->error('已经审核,暂不允许修改');
  130. }
  131. try {
  132. $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE)));
  133. $model = AccountApply::query()->where('id', $id)->update($data);
  134. return Response::success($model);
  135. } catch (\Exception $e) {
  136. $this->error($e);
  137. }
  138. }
  139. /**
  140. * 删除
  141. * @param $id
  142. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  143. * Author: Mead
  144. */
  145. public function destroy($id)
  146. {
  147. $this->isCan(PermissionEnum::controller_account_del);
  148. try {
  149. $this->repository->skipPresenter()->delete($id);
  150. return Response::success(null, T('successfully delete.'));
  151. } catch (\Exception $exception) {
  152. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  153. }
  154. }
  155. /**
  156. * 批量删除
  157. * @param Request $request
  158. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  159. * Author: Mead
  160. */
  161. public function delete(Request $request)
  162. {
  163. $this->isCan(PermissionEnum::controller_account_del);
  164. try {
  165. $this->validate($request, [
  166. 'ids' => 'required|array',
  167. ]);
  168. $ids = $request->get('ids');
  169. $this->repository->whereIn('id', $ids)->delete();
  170. return Response::success(null, T('successfully delete.'));
  171. } catch (\Exception $exception) {
  172. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  173. }
  174. }
  175. /**
  176. * 审核账号
  177. * @param Request $request
  178. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  179. * @throws \Illuminate\Validation\ValidationException
  180. */
  181. public function check(Request $request)
  182. {
  183. $this->validate($request, [
  184. 'id' => 'required|integer',
  185. 'check_status' => 'required|integer',
  186. 'check_result' => 'nullable|sometimes',
  187. 'roles' => 'nullable|sometimes|array',
  188. ]);
  189. $this->isCan(PermissionEnum::controller_account_check);
  190. $id = $request->get('id');
  191. $check_status = $request->get('check_status');
  192. $check_result = $request->get('check_result');
  193. $roles = $request->get('roles', []);
  194. $model = AccountApply::query()->find($id);
  195. if (!$model) {
  196. return $this->error('找不到该记录');
  197. }
  198. if (in_array($model->check_status, [CheckStatusEnum::OK, CheckStatusEnum::ERROR])) {
  199. return $this->error('该申请已经审核,请勿重复操作');
  200. }
  201. if ($model->check_status == CheckStatusEnum::OK) {
  202. if (Admin::query()->where('username', $model->account)->exists()) {
  203. return $this->error('该账号已存在');
  204. }
  205. $this->validate($request, [
  206. 'roles' => 'required|array',
  207. ]);
  208. }
  209. $model->check_status = $check_status;
  210. $model->check_result = $check_result;
  211. $model->check_time = Carbon::now()->toDateTimeString();
  212. $model->check_admin_id = login_admin_id();
  213. $model->roles = $roles;
  214. $model->save();
  215. if ($check_status == CheckStatusEnum::OK) {
  216. $department = Department::query()->firstOrCreate(['name' => $model->department], ['status' => ModelStatusEnum::OK]);
  217. $admin = Admin::query()->create([
  218. 'username' => $model->account,
  219. 'password' => Hash::make($model->password),
  220. 'name' => $model->name,
  221. 'headimg' => '',
  222. 'type' => Teacher::class,
  223. 'type_id' => 0,
  224. 'is_admin' => 0,
  225. 'department_id' => $department->id ?? 0,
  226. 'email' => $model->email,
  227. 'mobile' => $model->mobile,
  228. 'status' => ModelStatusEnum::OK,
  229. ]);
  230. $admin->syncRoles($roles);
  231. }
  232. return Response::success([]);
  233. }
  234. /**
  235. * 批量审核
  236. * @param Request $request
  237. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  238. * @throws \Illuminate\Validation\ValidationException
  239. */
  240. public function approveCheck(Request $request)
  241. {
  242. $this->isCan(PermissionEnum::controller_account_check);
  243. $this->validate($request, [
  244. 'ids' => 'required|array',
  245. 'check_status' => 'required|integer',
  246. 'check_result' => 'nullable|sometimes',
  247. ]);
  248. $ids = $request->get('ids');
  249. $check_status = $request->get('check_status');
  250. $check_result = $request->get('check_result');
  251. $accounts = AccountApply::query()->whereIn('id', $ids)->where('status', CheckStatusEnum::WAIT)->get();
  252. if (count($accounts) != count($ids)) {
  253. return $this->error('审核记录中和不满足条件的记录不匹配');
  254. }
  255. if ($check_status == ModelStatusEnum::OK) {
  256. foreach ($accounts as $account) {
  257. if (Admin::query()->where('username', $account->account)->exists()) {
  258. return $this->error('该账号已存在');
  259. }
  260. }
  261. }
  262. DB::beginTransaction();
  263. try {
  264. foreach ($accounts as $account) {
  265. $account->check_status = $check_status;
  266. $account->check_result = $check_result;
  267. $account->check_time = Carbon::now()->toDateTimeString();
  268. $account->check_admin_id = login_admin_id();
  269. $account->save();
  270. $admin = Admin::query()->create([
  271. 'username' => $account->account,
  272. 'password' => Hash::make($account->password),
  273. 'name' => $account->name,
  274. 'headimg' => '',
  275. 'type' => Teacher::class,
  276. 'type_id' => 0,
  277. 'is_admin' => 0,
  278. 'department_id' => $department->id ?? 0,
  279. 'email' => $account->email,
  280. 'mobile' => $account->mobile,
  281. 'status' => ModelStatusEnum::OK,
  282. ]);
  283. $admin->syncRoles(['outside_teacher']);
  284. }
  285. DB::commit();
  286. } catch (\Exception $exception) {
  287. DB::rollBack();
  288. return $this->error($exception->getMessage());
  289. }
  290. return Response::success([]);
  291. }
  292. }