LaborApplyController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Filters\LaborApplyFilters;
  4. use App\Http\Requests\LaborApply\LaborApplyRequest;
  5. use App\Jobs\LaborApplyRecordJob;
  6. use App\LaborApply;
  7. use App\Services\LaborApplyService;
  8. use App\UserWorkgroup;
  9. use App\Warehouse;
  10. use Illuminate\Contracts\Foundation\Application;
  11. use Illuminate\Database\Eloquent\Builder;
  12. use Illuminate\Http\RedirectResponse;
  13. use Illuminate\Http\Request;
  14. use Illuminate\Routing\Redirector;
  15. use Illuminate\Support\Facades\Auth;
  16. use Illuminate\Support\Facades\Cache;
  17. use Illuminate\Support\Facades\Gate;
  18. class LaborApplyController extends Controller
  19. {
  20. //限制同一用户提交频率
  21. const LABOR_APPLY_STORE_LIMIT = 'LABOR_APPLY_STORE_';
  22. const LABOR_APPLY_STORE_LIMIT_TTL = 10;
  23. public function index(Request $request, LaborApplyFilters $filters)
  24. {
  25. /** @var Builder $builder */
  26. $builder = LaborApply::query()
  27. ->filter($filters)
  28. ->with(['warehouse', 'userWorkGroup', 'applyUser']);
  29. /** @var User $user */
  30. $user = auth()->user();
  31. $auth_user_is_人事主管 = $user->roles()->where('name', '人事主管')->exists();
  32. if (!($user->isSuperAdmin() || $auth_user_is_人事主管 || Gate::allows('临时工申请协调-查看-可见全部'))) {
  33. $builder->where('apply_user_id', \auth()->id());
  34. }
  35. $labor_applies = $builder
  36. ->orderByDesc('id')
  37. ->simplePaginate();
  38. $warehouses = Warehouse::all();
  39. $user_work_groups = UserWorkgroup::all();
  40. return view('personnel.laborApply.index', compact('labor_applies','warehouses','user_work_groups'));
  41. }
  42. public function create()
  43. {
  44. $warehouses = Warehouse::all();
  45. $userWorkGroups = UserWorkgroup::all();
  46. /** @var LaborApplyService $service */
  47. $service = app('LaborApplyService');
  48. //获取开放状态
  49. $can_create_status = $service->getCanCreateStatus();
  50. return view('personnel.laborApply.create', compact('userWorkGroups', 'warehouses', 'can_create_status'));
  51. }
  52. public function store(LaborApplyRequest $request, LaborApply $laborApply)
  53. {
  54. //超时提交报错
  55. /** @var LaborApplyService $service */
  56. $service = app('LaborApplyService');
  57. $can_create_status = $service->getCanCreateStatus();
  58. if ($can_create_status == 2) {
  59. return redirect(route('laborApply.index'))->with('danger', '申请失败,已经超过提交时间');
  60. }
  61. //提交频率过高
  62. if (Cache::has(self::LABOR_APPLY_STORE_LIMIT . \auth()->id())) {
  63. return redirect(route('laborApply.create'))->with('warning', "提交频率过高,请等待" . self::LABOR_APPLY_STORE_LIMIT_TTL . "s以上再试!");
  64. }
  65. $laborApply->fill($request->all());
  66. $laborApply->apply_user_id = Auth::id();
  67. $laborApply->status = '创建';
  68. $laborApply->save();
  69. Cache::add(self::LABOR_APPLY_STORE_LIMIT . \auth()->id(), true, self::LABOR_APPLY_STORE_LIMIT_TTL);
  70. return redirect(route('laborApply.index'))->with('success', '申请成功!');
  71. }
  72. /**
  73. * Display the specified resource.
  74. *
  75. * @param \App\LaborApply $laborApply
  76. * @return \Illuminate\Http\Response
  77. */
  78. public function show(LaborApply $laborApply)
  79. {
  80. //
  81. }
  82. public function edit(LaborApply $laborApply)
  83. {
  84. $warehouses = Warehouse::all();
  85. $userWorkGroups = UserWorkgroup::all();
  86. return view('personnel.laborApply.edit', compact('laborApply', 'warehouses', 'userWorkGroups'));
  87. }
  88. public function update(Request $request, LaborApply $laborApply)
  89. {
  90. $laborApply->update($request->all());
  91. return redirect(route('laborApply.index'))->with('success', '申请更新成功!');
  92. }
  93. public function destroy(LaborApply $laborApply)
  94. {
  95. $laborApply->delete();
  96. return redirect(route('laborApply.index'))->with('success', '删除成功');
  97. }
  98. /**
  99. * 临时开放按钮
  100. * @return Application|RedirectResponse|Redirector
  101. */
  102. public function temporaryOpen()
  103. {
  104. /** @var LaborApplyService $service */
  105. $service = app('LaborApplyService');
  106. $service->setCanCreateStatus(LaborApply::CAN_CREATE_STATUS_TEMPORARY_OPEN);
  107. $ttl = LaborApplyService::LABOR_APPLY_STATUS_TTL;
  108. //调用定时任务 开放时间过了自动生成报表
  109. LaborApplyRecordJob::dispatch(true)->delay(now()->addSeconds($ttl));
  110. return redirect(route('laborApply.create'))->with('success', "临时开放成功,有效时间为:{$ttl}S ");
  111. }
  112. /**
  113. *手动生成劳务分配
  114. */
  115. public function createDispatch()
  116. {
  117. /** @var LaborApplyService $laborApplyService */
  118. $laborApplyService = app('LaborApplyService');
  119. $response = $laborApplyService->allocationLaborToLaborCompany(true);
  120. $route = 'laborCompanyDispatch.index';
  121. if ($response['success']) {
  122. return redirect(route('' . $route . ''))->with('success', '重新生成劳务派遣数据成功!');
  123. } else {
  124. return redirect(route($route))->with('danger', $response['error_message']);
  125. }
  126. }
  127. }