ScheduleApproveRecordsController.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. namespace App\Http\Controllers\Admin\School;
  3. use App\Exports\School\ApproveRecordExport;
  4. use App\Exports\School\ScheduleExport;
  5. use App\Http\Controllers\Controller;
  6. use App\Repositories\Enums\CheckStatusEnum;
  7. use App\Repositories\Enums\ModelStatusEnum;
  8. use App\Repositories\Enums\PermissionEnum;
  9. use App\Repositories\Enums\ResponseCodeEnum;
  10. use App\Repositories\Enums\RoleEnum;
  11. use App\Repositories\Enums\School\LessonScheduleApproveStatusEnum;
  12. use App\Repositories\Enums\School\LessonScheduleStatusEnum;
  13. use App\Repositories\Enums\School\ScheduleRecordTypeEnum;
  14. use App\Repositories\Enums\School\ScheduleTypeEnum;
  15. use App\Repositories\Enums\School\TeachTypeEnum;
  16. use App\Repositories\Models\Lab\Maintain;
  17. use App\Repositories\Models\School\LessonSchedule;
  18. use App\Repositories\Models\School\LessonTeacher;
  19. use App\Repositories\Models\School\ScheduleApproveLog;
  20. use App\Repositories\Models\School\ScheduleApproveRecord;
  21. use App\Services\Lab\ScheduleService;
  22. use Carbon\Carbon;
  23. use Illuminate\Http\Request;
  24. use Illuminate\Support\Arr;
  25. use Illuminate\Support\Facades\DB;
  26. use Illuminate\Support\Str;
  27. use Jiannei\Response\Laravel\Support\Facades\Response;
  28. use App\Contracts\Repositories\School\ScheduleApproveRecordRepository;
  29. use App\Repositories\Validators\School\ScheduleApproveRecordValidator;
  30. use Maatwebsite\Excel\Facades\Excel;
  31. /**
  32. * Class ScheduleApproveRecordsController.
  33. *
  34. * @package namespace App\Http\Controllers\School;
  35. */
  36. class ScheduleApproveRecordsController extends Controller
  37. {
  38. /**
  39. * @var ScheduleApproveRecordRepository
  40. */
  41. protected $repository;
  42. /**
  43. * @var ScheduleApproveRecordValidator
  44. */
  45. protected $validator;
  46. /**
  47. * ScheduleApproveRecordsController constructor.
  48. *
  49. * @param ScheduleApproveRecordRepository $repository
  50. * @param ScheduleApproveRecordValidator $validator
  51. */
  52. public function __construct(ScheduleApproveRecordRepository $repository, ScheduleApproveRecordValidator $validator)
  53. {
  54. parent::__construct();
  55. $this->repository = $repository;
  56. $this->validator = $validator;
  57. }
  58. /**
  59. * 列表
  60. * @param Request $request
  61. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  62. * Author: Mead
  63. */
  64. public function index(Request $request)
  65. {
  66. $lists = $this->repository->paginate($request->get('per_page', self::PAGE_NUM));
  67. return Response::success($lists);
  68. }
  69. /**
  70. * 详情
  71. * @param $id
  72. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  73. * Author: Mead
  74. */
  75. public function show($id)
  76. {
  77. $data = $this->repository->find($id);
  78. return Response::success($data);
  79. }
  80. /**
  81. * 审核
  82. * @param Request $request
  83. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  84. * @throws \Illuminate\Validation\ValidationException
  85. */
  86. public function check(Request $request)
  87. {
  88. $this->validate($request, [
  89. 'id' => 'required|integer',
  90. 'check_status' => 'required|integer',
  91. 'check_result' => 'nullable|sometimes',
  92. ]);
  93. $id = $request->get('id');
  94. $record = ScheduleApproveRecord::query()->find($id);
  95. $check_status = $request->get('check_status');
  96. $check_result = $request->get('check_result');
  97. if (!$record) {
  98. return $this->error('找不到该记录');
  99. }
  100. //需要检查权限 1:院系审核权限 2:实验室审核权限 3:两者全部权限
  101. $admin = login_admin();
  102. $role_index = 0;
  103. if ($this->iscan([PermissionEnum::controller_schedule_check_YX, PermissionEnum::controller_schedule_check_SYZX], true)) {
  104. $this->validate($request, ['type' => 'required|in:1,2,3']);
  105. $type = $request->get('type');
  106. $role_index = $type;
  107. } else {
  108. $role_index = $admin->can(PermissionEnum::controller_schedule_check_SYZX) ? 2 : 0;
  109. $role_index += $admin->can(PermissionEnum::controller_schedule_check_YX) ? 1 : 0;
  110. }
  111. $re = (new ScheduleService())->check(self::$TERM_ID, $record, $check_status, $check_result, $role_index);
  112. if ($re) {
  113. return $this->error($re);
  114. }
  115. return Response::success([]);
  116. }
  117. /**
  118. * 审核进度
  119. * @param Request $request
  120. * @return
  121. */
  122. public function checkProgress(Request $request)
  123. {
  124. $this->validate($request, [
  125. 'id' => 'required|integer',
  126. ]);
  127. $id = $request->get('id');
  128. $yx = ScheduleApproveLog::query()->where('status', ModelStatusEnum::OK)->where('schedule_approve_id', $id)->where('type', ScheduleApproveLog::TYPE_YX)->with(['check_admin'])->select(['id', 'check_admin_id', 'check_time', 'check_status', 'check_result'])->orderByDesc('id')->first();
  129. $syzx = ScheduleApproveLog::query()->where('status', ModelStatusEnum::OK)->where('schedule_approve_id', $id)->where('type', ScheduleApproveLog::TYPE_SYZX)->with(['check_admin'])->select(['id', 'check_admin_id', 'check_time', 'check_status', 'check_result'])->orderByDesc('id')->first();
  130. return Response::success(compact('yx', 'syzx'));
  131. }
  132. /**
  133. * 删除
  134. * @param $id
  135. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  136. * Author: Mead
  137. */
  138. public function destroy($id)
  139. {
  140. try {
  141. $this->repository->skipPresenter()->delete($id);
  142. return Response::success(null, T('successfully delete.'));
  143. } catch (\Exception $exception) {
  144. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  145. }
  146. }
  147. /**
  148. * 暂停
  149. * @param Request $request
  150. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  151. * @throws \Illuminate\Validation\ValidationException
  152. */
  153. public function pause(Request $request)
  154. {
  155. $this->validate($request, [
  156. 'id' => 'required|integer',
  157. 'type' => 'sometimes|nullable|integer',
  158. ]);
  159. $status = ModelStatusEnum::PAUSE;
  160. if ($request->get('type')) {
  161. $status = ModelStatusEnum::OK;
  162. }
  163. $re = ScheduleApproveRecord::query()->where('id', $request->get('id'))->update(['status' => $status]);
  164. if ($re) {
  165. return Response::success([]);
  166. }
  167. return $this->error('操作失败');
  168. }
  169. /**
  170. * 停调课申请记录导出
  171. * @param Request $request
  172. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  173. * @throws \Illuminate\Validation\ValidationException
  174. */
  175. public function approveRecordExport(Request $request)
  176. {
  177. $this->validate($request, [
  178. 'room_id' => 'sometimes|integer',
  179. 'status' => 'sometimes|integer',
  180. 'type' => 'sometimes|integer',
  181. ]);
  182. $this->isCan(PermissionEnum::controller_schedule_recordExport);
  183. $room_id = $request->get('room_id', false);
  184. $status = $request->get('status', false);
  185. $type = $request->get('type', false);
  186. $file_name = '停调补课记录_' . Str::random(8) . '.xlsx';
  187. return Excel::download(new ApproveRecordExport(self::$TERM_ID, $room_id, $status, $type), $file_name);
  188. }
  189. /**
  190. * 批量审核
  191. * @param Request $request
  192. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  193. * @throws \Illuminate\Validation\ValidationException
  194. */
  195. public function approveCheck(Request $request)
  196. {
  197. $this->validate($request, [
  198. 'ids' => 'required|array',
  199. 'check_status' => 'required|integer',
  200. 'check_result' => 'nullable|sometimes',
  201. ]);
  202. $ids = $request->get('ids');
  203. $check_status = $request->get('check_status');
  204. $check_result = $request->get('check_result');
  205. $records = ScheduleApproveRecord::query()->whereIn('id', $ids)->whereIn('status', [LessonScheduleApproveStatusEnum::WAIT, LessonScheduleApproveStatusEnum::YX_OK, LessonScheduleApproveStatusEnum::SYZX_OK])->get();
  206. if (count($records) != count($ids)) {
  207. return $this->error('修改记录中存在不满足条件的');
  208. }
  209. //需要检查权限 1:院系审核权限 2:实验室审核权限 3:两者全部权限
  210. $admin = login_admin();
  211. $role_index = 0;
  212. if ($this->isCan([PermissionEnum::controller_schedule_check_YX, PermissionEnum::controller_schedule_check_SYZX], true)) {
  213. $this->validate($request, ['type' => 'required|in:1,2,3']);
  214. $type = $request->get('type');
  215. $role_index = $type;
  216. } else {
  217. $role_index = $admin->can(PermissionEnum::controller_schedule_check_SYZX) ? 2 : 0;
  218. $role_index += $admin->can(PermissionEnum::controller_schedule_check_YX) ? 1 : 0;
  219. }
  220. foreach ($records as $record) {
  221. $re = (new ScheduleService())->check(self::$TERM_ID, $record, $check_status, $check_result, $role_index, true);
  222. if ($re) {
  223. return $this->error($re);
  224. }
  225. }
  226. DB::beginTransaction();
  227. foreach ($records as $record) {
  228. $re = (new ScheduleService())->check(self::$TERM_ID, $record, $check_status, $check_result, $role_index);
  229. if ($re) {
  230. DB::rollBack();
  231. return $this->error($re);
  232. }
  233. }
  234. DB::commit();
  235. return Response::success([]);
  236. }
  237. }