OwnerMaterialController.php 3.9 KB

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