DemandController.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Demand;
  4. use App\Components\AsyncResponse;
  5. use App\Filters\DemandFilters;
  6. use App\Http\Requests\Demand\DemandRequest;
  7. use App\Services\DemandService;
  8. use App\UploadFile;
  9. use App\User;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Contracts\Foundation\Application;
  12. use Illuminate\Contracts\View\Factory;
  13. use Illuminate\Support\Facades\Auth;
  14. use Illuminate\View\View;
  15. class DemandController extends Controller
  16. {
  17. use AsyncResponse;
  18. /**
  19. * @param Request $request
  20. * @param DemandFilters $filters
  21. * @return Application|Factory|View
  22. */
  23. public function index(Request $request, DemandFilters $filters)
  24. {
  25. // 查询权限
  26. $user = Auth::user();
  27. if(!isset($user))return redirect('/');
  28. $demands = Demand::query()->with(['initiator', 'handle', 'uploadFile', 'processes.user'])->filter($filters)->orderByDesc('demands.id')->paginate($request['paginate'] ?? 50);
  29. return view('demand.search.index', compact('demands'));
  30. }
  31. /**
  32. * @param DemandRequest $request
  33. * @param DemandService $service
  34. */
  35. public function storeApi(DemandRequest $request, DemandService $service)
  36. {
  37. /** @var Demand $demand */
  38. $params = $request->all();
  39. $params['initiator'] = Auth::user()['id'];
  40. $demand = Demand::query()->create($params);
  41. if ($demand) {
  42. $file = $request->file('file');
  43. if (isset($file)) $service->saveUPLoadFile($demand, $file);
  44. $this->success($demand);
  45. } else {
  46. $this->error('需求创建出现异常');
  47. }
  48. }
  49. /**
  50. * @param DemandRequest $request
  51. */
  52. public function updateApi(DemandRequest $request)
  53. {
  54. $demand = Demand::query()->where('id',$request['id'])->first();
  55. if($demand['initiator'] != Auth::user()['id'])
  56. $this->error('非当前需求创建人不可修改');
  57. $bool = $demand->update($request->all());
  58. if ($bool) {
  59. $demand->loadMissing('authority', 'initiator', 'handle', 'uploadFile', 'processes');
  60. $this->success($demand);
  61. }
  62. $this->error('需求更新出现异常');
  63. }
  64. /**
  65. * @param DemandRequest $request
  66. * @param DemandService $service
  67. */
  68. public function uploadFileApi(DemandRequest $request, DemandService $service)
  69. {
  70. /** @var Demand $demand */
  71. $demand = Demand::query()->where('id',$request['id'])->first();
  72. $service->saveUPLoadFile($demand, $request->file('file'));
  73. $demand->loadMissing('authority', 'initiator', 'handle', 'uploadFile', 'processes');
  74. $this->success($demand);
  75. }
  76. /**
  77. * @param DemandRequest $request
  78. */
  79. public function destroyFileApi(DemandRequest $request)
  80. {
  81. /** @var Demand $demand */
  82. $demand = Demand::query()->where('id',$request['id'])->first();
  83. /** @var UploadFile $uploadFile */
  84. $uploadFile = $demand->uploadFile();
  85. try {
  86. $bool = $uploadFile->delete();
  87. if($bool)$this->success();
  88. $this->error('删除出现异常');
  89. } catch (\Exception $e) {
  90. $this->error($e->getMessage());
  91. }
  92. }
  93. /**
  94. * 删除需求
  95. *
  96. * @param DemandRequest $request
  97. */
  98. public function destroyApi(DemandRequest $request)
  99. {
  100. $this->gate('需求管理-问题-删除');
  101. $demand = Demand::query()->find($request['id']);
  102. try {
  103. $bool = $demand->delete();
  104. if ($bool) $this->success();
  105. else $this->error('删除失败');
  106. } catch (\Exception $e) {
  107. $this->error($e->getMessage());
  108. }
  109. }
  110. /**
  111. * 完结需求
  112. *
  113. * @param DemandRequest $request
  114. * @param DemandService $service
  115. */
  116. public function finishApi(DemandRequest $request,DemandService $service)
  117. {
  118. $demand = Demand::query()->where('id',$request['id'])->first();
  119. $result = $service->finishDemand($demand);
  120. if($result['success']){
  121. $this->success($result['data']);
  122. }
  123. $this->error($result['message']);
  124. }
  125. /**
  126. * 需求认领
  127. *
  128. * @param DemandRequest $request
  129. * @param DemandService $service
  130. */
  131. public function claimApi(DemandRequest $request,DemandService $service)
  132. {
  133. /** @var Demand $demand */
  134. $demand = Demand::query()->where('id',$request['id'])->first();
  135. $handler = Auth::user()['id'];
  136. $result = $service->claimDemand($demand,$handler);
  137. if($result['success']){
  138. $this->success($result['data']);
  139. }
  140. $this->error($result['message']);
  141. }
  142. /**
  143. * 未认领任务和未完成比例
  144. *
  145. * @param Request $request
  146. * @param DemandService $demandService
  147. */
  148. public function getUnClaimDemandRatioApi(Request $request,DemandService $demandService)
  149. {
  150. /** @var User $user */
  151. $user = Auth::user();
  152. if($user && !$user->isSuperAdmin())$this->success(null);
  153. $this->success($demandService->getUnClaimDemandRatio());
  154. }
  155. }