BimService.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. public function getGlendaleBimInfo(BimFile $bimFile)
  30. {
  31. $glendale = new Glendale;
  32. $result = $glendale->getModelDetail($bimFile);
  33. $stationUrl = config('bim.glendale.host');
  34. $result = Arr::only($result, ['modelAccessAddress', 'lightweightName', 'fileOwnership', 'floorJsonURL', 'fileType', 'initiatingUser', 'modelType', 'name']);
  35. $result['stationUrl'] = $stationUrl;
  36. $result['stationToken'] = config('bim.glendale.token');
  37. $result['modelType'] = $bimFile->model_type;
  38. return $result;
  39. }
  40. /**
  41. * 保存轻量化后的模型信息
  42. * @param \App\Models\BimFile $bimFile
  43. * @return BimFile
  44. */
  45. public function storeBimInfo(BimFile $bimFile): BimFile
  46. {
  47. try {
  48. $infoArr = BIMFactory::make($bimFile->bim_driver)->getModelDetail($bimFile);
  49. $extra = Arr::only($infoArr, ['softwareType', 'dataVersion', 'fileOwnership', 'achievementFileSize', 'configJson', 'callbackInterfaceURL']);
  50. if ($infoArr) {
  51. $bimFile->extra = $extra;
  52. }
  53. if (isset($infoArr['status']) && $infoArr['status'] != $bimFile->source_status) {
  54. $bimFile->source_status = $infoArr['status'];
  55. $bimFile->convert_status = Glendale::mapSourceStatus($infoArr['status']);
  56. }
  57. $bimFile->save();
  58. } catch (\Throwable $th) {
  59. Log::error('storeBimInfo Fail:' . $th->getMessage());
  60. } finally {
  61. return $bimFile;
  62. }
  63. }
  64. public function syncGlendaleBimData(BimFile $bimFile)
  65. {
  66. $glendale = new Glendale;
  67. return $glendale->syncDB($bimFile->bim_file_id);
  68. }
  69. }