| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- <?php
- namespace App\Http\Controllers;
- use App\Filters\LaborApplyFilters;
- use App\Http\Requests\LaborApply\LaborApplyRequest;
- use App\Jobs\LaborApplyRecordJob;
- use App\LaborApply;
- use App\Services\LaborApplyService;
- use App\UserWorkgroup;
- use App\Warehouse;
- use Illuminate\Contracts\Foundation\Application;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Http\RedirectResponse;
- use Illuminate\Http\Request;
- use Illuminate\Routing\Redirector;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\Gate;
- class LaborApplyController extends Controller
- {
- //限制同一用户提交频率
- const LABOR_APPLY_STORE_LIMIT = 'LABOR_APPLY_STORE_';
- const LABOR_APPLY_STORE_LIMIT_TTL = 10;
- public function index(Request $request, LaborApplyFilters $filters)
- {
- /** @var Builder $builder */
- $builder = LaborApply::query()
- ->filter($filters)
- ->with(['warehouse', 'userWorkGroup', 'applyUser']);
- /** @var User $user */
- $user = auth()->user();
- $auth_user_is_人事主管 = $user->roles()->where('name', '人事主管')->exists();
- if (!($user->isSuperAdmin() || $auth_user_is_人事主管 || Gate::allows('临时工申请协调-查看-可见全部'))) {
- $builder->where('apply_user_id', \auth()->id());
- }
- $labor_applies = $builder
- ->orderByDesc('id')
- ->simplePaginate();
- $warehouses = Warehouse::all();
- $user_work_groups = UserWorkgroup::all();
- return view('personnel.laborApply.index', compact('labor_applies','warehouses','user_work_groups'));
- }
- public function create()
- {
- $warehouses = Warehouse::all();
- $userWorkGroups = UserWorkgroup::all();
- /** @var LaborApplyService $service */
- $service = app('LaborApplyService');
- //获取开放状态
- $can_create_status = $service->getCanCreateStatus();
- return view('personnel.laborApply.create', compact('userWorkGroups', 'warehouses', 'can_create_status'));
- }
- public function store(LaborApplyRequest $request, LaborApply $laborApply)
- {
- //超时提交报错
- /** @var LaborApplyService $service */
- $service = app('LaborApplyService');
- $can_create_status = $service->getCanCreateStatus();
- if ($can_create_status == 2) {
- return redirect(route('laborApply.index'))->with('danger', '申请失败,已经超过提交时间');
- }
- //提交频率过高
- if (Cache::has(self::LABOR_APPLY_STORE_LIMIT . \auth()->id())) {
- return redirect(route('laborApply.create'))->with('warning', "提交频率过高,请等待" . self::LABOR_APPLY_STORE_LIMIT_TTL . "s以上再试!");
- }
- $laborApply->fill($request->all());
- $laborApply->apply_user_id = Auth::id();
- $laborApply->status = '创建';
- $laborApply->save();
- Cache::add(self::LABOR_APPLY_STORE_LIMIT . \auth()->id(), true, self::LABOR_APPLY_STORE_LIMIT_TTL);
- return redirect(route('laborApply.index'))->with('success', '申请成功!');
- }
- /**
- * Display the specified resource.
- *
- * @param \App\LaborApply $laborApply
- * @return \Illuminate\Http\Response
- */
- public function show(LaborApply $laborApply)
- {
- //
- }
- public function edit(LaborApply $laborApply)
- {
- $warehouses = Warehouse::all();
- $userWorkGroups = UserWorkgroup::all();
- return view('personnel.laborApply.edit', compact('laborApply', 'warehouses', 'userWorkGroups'));
- }
- public function update(Request $request, LaborApply $laborApply)
- {
- $laborApply->update($request->all());
- return redirect(route('laborApply.index'))->with('success', '申请更新成功!');
- }
- public function destroy(LaborApply $laborApply)
- {
- $laborApply->delete();
- return redirect(route('laborApply.index'))->with('success', '删除成功');
- }
- /**
- * 临时开放按钮
- * @return Application|RedirectResponse|Redirector
- */
- public function temporaryOpen()
- {
- /** @var LaborApplyService $service */
- $service = app('LaborApplyService');
- $service->setCanCreateStatus(LaborApply::CAN_CREATE_STATUS_TEMPORARY_OPEN);
- $ttl = LaborApplyService::LABOR_APPLY_STATUS_TTL;
- //调用定时任务 开放时间过了自动生成报表
- LaborApplyRecordJob::dispatch(true)->delay(now()->addSeconds($ttl));
- return redirect(route('laborApply.create'))->with('success', "临时开放成功,有效时间为:{$ttl}S ");
- }
- /**
- *手动生成劳务分配
- */
- public function createDispatch()
- {
- /** @var LaborApplyService $laborApplyService */
- $laborApplyService = app('LaborApplyService');
- $response = $laborApplyService->allocationLaborToLaborCompany(true);
- $route = 'laborCompanyDispatch.index';
- if ($response['success']) {
- return redirect(route('' . $route . ''))->with('success', '重新生成劳务派遣数据成功!');
- } else {
- return redirect(route($route))->with('danger', $response['error_message']);
- }
- }
- }
|