OwnerMaterialController.php 3.3 KB

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