BimService.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Services\File;
  3. use App\Libraries\BIM\BIMFactory;
  4. use App\Libraries\BIM\Glendale\Glendale;
  5. use App\Models\BimFile;
  6. use Illuminate\Support\Arr;
  7. use Illuminate\Support\Facades\Log;
  8. class BimService
  9. {
  10. /**
  11. * 更新模型轻量化状态
  12. * @param string $bimFileId
  13. * @param int $sourceStatus
  14. * @return void
  15. */
  16. public function setGlendaleModelCovertStatus(string $bimFileId, int $sourceStatus)
  17. {
  18. if (empty($bimFileId)) {
  19. return;
  20. }
  21. $convertStatus = Glendale::mapSourceStatus($sourceStatus);
  22. $bimFile = BimFile::where("bim_file_id", $bimFileId)->where('bim_driver', 'glendale')->first();
  23. if ($bimFile && ($bimFile->convert_status != $convertStatus || $bimFile->source_status != $sourceStatus)) {
  24. $bimFile->convert_status = $convertStatus;
  25. $bimFile->source_status = $sourceStatus;
  26. $bimFile->save();
  27. }
  28. }
  29. /**
  30. * 保存轻量化后的模型信息
  31. * @param \App\Models\BimFile $bimFile
  32. * @return BimFile
  33. */
  34. public function storeBimInfo(BimFile $bimFile): BimFile
  35. {
  36. try {
  37. $infoArr = BIMFactory::make($bimFile->bim_driver)->getModelDetail($bimFile);
  38. $extra = Arr::only($infoArr, ['softwareType', 'dataVersion', 'fileOwnership', 'achievementFileSize', 'configJson', 'callbackInterfaceURL']);
  39. if ($infoArr) {
  40. $bimFile->extra = $extra;
  41. }
  42. if (isset($infoArr['status']) && $infoArr['status'] != $bimFile->source_status) {
  43. $bimFile->source_status = $infoArr['status'];
  44. $bimFile->convert_status = Glendale::mapSourceStatus($infoArr['status']);
  45. }
  46. $bimFile->save();
  47. } catch (\Throwable $th) {
  48. Log::error('storeBimInfo Fail:' . $th->getMessage());
  49. } finally {
  50. return $bimFile;
  51. }
  52. }
  53. }