OwnerMaterialController.php 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Components\AsyncResponse;
  4. use App\Exceptions\Exception;
  5. use App\Filters\OwnerMaterialFilters;
  6. use App\Material;
  7. use App\OwnerMaterial;
  8. use App\Services\OwnerService;
  9. use App\UploadFile;
  10. use Faker\Provider\Uuid;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Auth;
  13. use Illuminate\Support\Facades\Gate;
  14. use Illuminate\Support\Facades\Storage;
  15. class OwnerMaterialController extends Controller
  16. {
  17. use AsyncResponse;
  18. public function index(Request $request,OwnerMaterialFilters $filters)
  19. {
  20. $this->gate('项目耗材');
  21. $ownerMaterials = OwnerMaterial::query()->with(['owner','material','initiator','file'])->orderByDesc('id')->filter($filters)->paginate($request['paginate'] ?? 50);
  22. $owners = app(OwnerService::class)->getAuthorizedOwners();
  23. $materials = Material::all();
  24. return view('/maintenance/ownerMaterial/index',compact('ownerMaterials','owners','materials'));
  25. }
  26. public function storeApi(Request $request):array
  27. {
  28. $this->gate('项目耗材-编辑');
  29. $params = $request->all(['owner_id', 'material_id', 'material_code', 'size', 'special', 'specification']);
  30. $params['initiator'] = Auth::user()['id'];
  31. try {
  32. $material = OwnerMaterial::query()->create($params);
  33. if ($material) return ['success' => true,'data' => $material->loadMissing(['owner','material','initiator','file'])];
  34. else return ['success' => false, 'message' => '添加失败'];
  35. } catch (\Exception $e) {
  36. return ['success' => false,'message' => $e->getMessage()];
  37. }
  38. }
  39. public function updateApi(Request $request)
  40. {
  41. $this->gate('项目耗材-编辑');
  42. $material = OwnerMaterial::query()->find($request['id']);
  43. if(!$material)$this->error("对应的项目耗材没有找到");
  44. $bool = $material->update($request->all(['owner_id', 'material_id', 'material_code', 'size', 'special', 'specification']));
  45. if($bool==0)$this->error("更新异常");
  46. $this->success($material->loadMissing(['owner','material','initiator','file']));
  47. }
  48. public function destroyApi($id)
  49. {
  50. $this->gate('项目耗材-删除');
  51. $ownerMaterial = OwnerMaterial::query()->find($id);
  52. if(!$ownerMaterial)$this->error('对应的项目耗材没有找到');
  53. $ownerMaterial->delete();
  54. $this->success();
  55. }
  56. public function uploadFileApi(Request $request)
  57. {
  58. $this->gate('项目耗材-文件上传');
  59. $ownerMaterial = OwnerMaterial::query()->find($request['id']);
  60. if(!$ownerMaterial)$this->error('项目耗材不存在');
  61. try {
  62. $file = $request->file('file');
  63. if(!$file)$this->error('请选择上传文件');
  64. $fileType = $file->getMimeType();// 文件类型
  65. $fileName = strtolower($file->getClientOriginalExtension());// 文件名
  66. $path = $file->storeAs("ownerMaterial", Uuid::uuid() . "." . $fileName);
  67. $file = UploadFile::query()->create([
  68. 'table_name' => 'owner_material',
  69. 'table_id' => $ownerMaterial['id'],
  70. 'url' => $path,
  71. 'type' => $fileType,
  72. "file_name" => $file->getClientOriginalName()
  73. ]);
  74. $ownerMaterial->loadMissing(['owner', 'material', 'initiator', 'file']);
  75. $this->success($ownerMaterial);
  76. } catch (Exception $e) {
  77. $this->error($e->getMessage());
  78. }
  79. }
  80. public function downFile(Request $request)
  81. {
  82. if(!Gate::allows('项目耗材'))return ['success'=>false,"data"=>"无权操作"];
  83. $file = $request->input("file");
  84. $name = $request->input("name");
  85. return Storage::download($file,$name);
  86. }
  87. }