OwnerMaterialController.php 3.9 KB

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