validate($request, [ 'bim_file_id' => 'required', 'new_bim_file_id' => 'required', 'glid' => 'required', //楼层节点id 'new_glid' => 'required', // ]); $components = $glendale->getFloorComponents($inputArr['bim_file_id'], $inputArr['glid']); $newComponents = $glendale->getFloorComponents($inputArr['new_bim_file_id'], $inputArr['new_glid']); $data['create'] = array_values(array_diff($newComponents, $components)); $sameComponentIds = array_values(array_intersect($components, $newComponents)); $data['delete'] = array_values(array_diff($components, $newComponents)); $attributes = $glendale->getAttributes($inputArr['bim_file_id'], $sameComponentIds); $newAttributes = $glendale->getAttributes($inputArr['new_bim_file_id'], $sameComponentIds); $data['update'] = $glendale->getUpdatedComponentIds($sameComponentIds, $attributes, $newAttributes); $data['componets'] = $components; $data['new_componets'] = $newComponents; return $this->successData($data); } // 设置BIM预览图 public function setPreviewImage(Request $request, Cos $cos) { $inputArr = $this->validate($request, [ 'base64' => 'required', 'bim_file_id' => 'required', ]); $base64Str = $inputArr['base64']; $match = preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64Str, $result); if (!$match) { return $this->badRequest('not base64'); } $base64Image = str_replace($result[1], '', $base64Str); $fileContent = base64_decode($base64Image); $key = cos_upload_prefix(Auth::user()->company_id, 'preview', $inputArr['bim_file_id'] . '.png'); $r = $cos->uploadDirectly($key, $fileContent); if (isset($r['Key'])) { BimFile::where('bim_file_id', $inputArr['bim_file_id'])->update(['preview_path' => $r['Key']]); } return $this->successData($r); } //模型多视图信息 public function multipleViews(Request $request, Glendale $glendale) { $lightweightName = $request->input('lightweight_name', ''); $data = $glendale->getModel3DViews($lightweightName); return $this->successData($data); } // 模型合并保存 public function combine(Request $request) { $inputArr = $this->validate($request, [ 'name' => 'required', 'library_id' => 'required', 'data' => 'required|array', 'data.*.bim_file_id' => 'required', 'data.*.offset' => 'required', 'data.*.rotate' => 'required', 'data.*.file_id' => 'required', ]); $library = Library::query()->allowed()->findOrFail((int)$inputArr['library_id']); $bimCombine = BimCombine::create([ 'company_id' => Auth::user()->company_id, 'created_by' => Auth::id(), 'library_id' => $library->id, 'name' => $inputArr['name'], 'data' => $inputArr['data'] ]); return new BimCombineResource($bimCombine); } //合模列表接口 public function combinedList() { $bimCombines = BimCombine::query()->allowed()->latest('id')->paginate(); $bimFileIds = []; foreach ($bimCombines as $bimCombine) { foreach ($bimCombine->data as $data) { if (isset($data['bim_file_id']) && !in_array($data['bim_file_id'], $bimFileIds)) { $bimFileIds[] = $data['bim_file_id']; } } } $deletedIds = BimFile::query()->whereIn('bim_file_id', $bimFileIds) ->whereHas('file', function ($query) { return $query->onlyTrashed(); })->pluck('bim_file_id')->toArray(); request()->merge(['deleteIds' => $deletedIds]); return BimCombineResource::collection($bimCombines); } //删除合模 public function combineDelete(int $combineId) { $bimCombine = BimCombine::query()->allowed()->where('id', $combineId)->firstOrFail(); $bimCombine->delete(); return $this->noContent(); } //修改合模 public function combineUpdate(Request $request, int $combineId) { $inputArr = $this->validate($request, [ 'name' => 'required', 'data' => 'required|array', 'data.*.bim_file_id' => 'required', 'data.*.file_id' => 'required', 'data.*.offset' => 'required', 'data.*.rotate' => 'required', ]); $bimCombine = BimCombine::query()->allowed()->where('id', $combineId)->firstOrFail(); $bimCombine->update([ 'name' => $inputArr['name'], 'data' => $inputArr['data'] ]); return new BimCombineResource($bimCombine); } // 碰撞检测 public function initiateCollision() {} }