function ($params) { $keyword = $params['keyword'] ?? ''; return [ 'filters' => $params['filters'], 'fields' => ['id', 'vin', 'brand', 'cover', 'price', 'type', 'energy', 'model', 'video', 'views', 'creater', 'created_at', 'updated_at'], 'relations' => [ 'translation' => ['vehicle_id', 'locale', 'name', 'cover_alt', 'condition_desc', 'location'], 'asked' => ['id', 'vehicle_id', 'status', 'sort'], 'asked.translation' => ['id', 'asked_id', 'locale', 'title', 'content'], 'trait' => ['id', 'vehicle_id', 'status', 'sort'], 'trait.translation' => ['id', 'trait_id', 'locale', 'title', 'content'], 'album' => ['id', 'vehicle_id', 'pic', 'status', 'sort'], 'album.translation' => ['id', 'album_id', 'locale', 'alt'], 'content' => ['id', 'vehicle_id', 'status', 'sort'], 'content.translation' => ['id', 'content_id', 'locale', 'content'], 'brand.translation' => ['brand_id', 'name'], 'types.translation' => ['type_id', 'name'], 'energy.translation' => ['energy_id', 'name'], 'models.translation' => ['model_id', 'name'], 'creater' => ['id', 'nickname',], ], 'sorts' => [ ['field' => 'id', 'direction' => 'desc'] ], 'pagination' => [ 'page' => $params['page'] ?? 1, 'per_page' => $params['per_page'] ?? 10, ] ]; }, 'show' => function ($params) { $keyword = $params['keyword'] ?? ''; return [ 'filters' => [ ['field'=>'id', 'operator'=>'=', 'value'=> $params['id']], ], 'fields' => ['id', 'vin', 'brand', 'cover', 'price', 'type', 'energy', 'model', 'video', 'views', 'creater', 'created_at', 'updated_at'], 'relations' => [ 'translation' => ['vehicle_id', 'locale', 'name', 'cover_alt', 'condition_desc', 'location'], 'asked' => ['id', 'vehicle_id', 'status', 'sort'], 'asked.translation' => ['id', 'asked_id', 'locale', 'title', 'content'], 'trait' => ['id', 'vehicle_id', 'status', 'sort'], 'trait.translation' => ['id', 'trait_id', 'locale', 'title', 'content'], 'album' => ['id', 'vehicle_id', 'pic', 'status', 'sort'], 'album.translation' => ['id', 'album_id', 'locale', 'alt'], 'content' => ['id', 'vehicle_id', 'status', 'sort'], 'content.translation' => ['id', 'content_id', 'locale', 'content'], 'brand.translation' => ['brand_id', 'name'], 'types.translation' => ['type_id', 'name'], 'energy.translation' => ['energy_id', 'name'], 'models.translation' => ['model_id', 'name'], 'creater' => ['id', 'nickname',], ], 'sorts' => [ ['field' => 'id', 'direction' => 'desc'] ], 'pagination' => [ 'page' => $params['page'] ?? 1, 'per_page' => $params['per_page'] ?? 10, ] ]; } ]; } // 声明需要多语言翻译 protected array $translatable = [ 'condition_desc','name','cover_alt', ]; public function add(array $params) { $sourceLocale = locale(); $sourceFields = $this->extractSourceFields($params); if (empty($sourceFields)) { throw new \InvalidArgumentException("请传递至少一条 {$sourceLocale} 语言的翻译字段"); }; $askeds = $params['asked']; unset($params['asked']); $traits = $params['trait']; unset($params['trait']); $albums = $params['album']; unset($params['album']); $contents = $params['content']; unset($params['content']); $skus = $params['sku']; unset($params['sku']); $VehicleNewAskedService = new VehicleNewAskedService(new VehicleNewAskedModel()); $VehicleNewTraitService = new VehicleNewTraitService(new VehicleNewTraitModel()); $VehicleNewAlbumService = new VehicleNewAlbumService(new VehicleNewAlbumModel()); $VehicleNewContentService = new VehicleNewContentService(new VehicleNewContentModel()); $VehicleNewSkusService = new VehicleNewSkusService(new VehicleNewSkusModel()); $VehicleNewSkuAttributesService = new VehicleNewSkuAttributesService(new VehicleNewSkuAttributesModel()); Db::beginTransaction(); try { if(empty($params['model'])){ $params['model'] = 0; } $info = $this->create($params); if (!$info) { throw new BusinessException('提交失败'); } // 异步翻译并写入 hs_vehicle_data_translation 表 (new TranslationService())->queueTranslations( 'vehicleNew', $info->id, $sourceLocale, $sourceFields ); foreach ($askeds as $asked) { $askedsourceFields = $VehicleNewAskedService->extractSourceFields($asked); $asked['vehicle_id'] = $info->id; $asked_res = $VehicleNewAskedService->create($asked); if (!$asked_res) { throw new BusinessException('提交失败'); } // $askedsourceFields['asked_id'] = $asked_res->id; (new TranslationService())->queueTranslations( 'vehicleNewAsked', $asked_res->id, $sourceLocale, $askedsourceFields ); } foreach ($traits as $trait) { $traitsourceFields = $VehicleNewTraitService->extractSourceFields($trait); $trait['vehicle_id'] = $info->id; $trait_res = $VehicleNewTraitService->create($trait); if (!$trait_res) { throw new BusinessException('提交失败'); } (new TranslationService())->queueTranslations( 'vehicleNewTrait', $trait_res->id, $sourceLocale, $traitsourceFields ); } foreach ($albums as $album) { $albumsourceFields = $VehicleNewAlbumService->extractSourceFields($album); $album['vehicle_id'] = $info->id; $album_res = $VehicleNewAlbumService->create($album); if (!$album_res) { throw new BusinessException('提交失败'); } (new TranslationService())->queueTranslations( 'vehicleNewAlbum', $album_res->id, $sourceLocale, $albumsourceFields ); } foreach ($contents as $content) { $contentsourceFields = $VehicleNewContentService->extractSourceFields($content); $content['vehicle_id'] = $info->id; $content_res = $VehicleNewContentService->create($content); if (!$content_res) { throw new BusinessException('提交失败'); } (new TranslationService())->queueTranslations( 'vehicleNewContent', $content_res->id, $sourceLocale, $contentsourceFields ); } foreach ($skus as $sku) { $sku['vehicle_id'] = $info->id; $sku_code = sprintf("%05d", $info->id); $sku['sku_code'] = rand(100,999).$sku_code[0].' '.substr($sku_code,1).' '.sprintf("%04d", $sku['skuAttributes'][0]['attribute_id']).' '.sprintf("%04d", $sku['skuAttributes'][0]['value_id']); $sku_res = $VehicleNewSkusService->create($sku); if (!$sku_res) { throw new BusinessException('提交失败'); } $skuAttributes = $sku['skuAttributes']; foreach ($skuAttributes as $skuAttribute) { $skuAttribute['sku_id'] = $sku_res->id; $skuAttribute_res = $VehicleNewSkuAttributesService->create($skuAttribute); if (!$skuAttribute_res) { throw new BusinessException('提交失败'); } } } Db::commit(); return true; } catch (\Throwable $th) { Db::rollBack(); throw $th; } } public function edit(array $params, int $id) { $sourceLocale = locale(); $sourceFields = $this->extractSourceFields($params); if (empty($sourceFields)) { throw new \InvalidArgumentException("请传递至少一条 {$sourceLocale} 语言的翻译字段"); }; $askeds = $params['asked']; unset($params['asked']); $traits = $params['trait']; unset($params['trait']); $albums = $params['album']; unset($params['album']); $contents = $params['content']; unset($params['content']); $skus = $params['sku']; unset($params['sku']); $VehicleNewAskedService = new VehicleNewAskedService(new VehicleNewAskedModel()); $VehicleNewTraitService = new VehicleNewTraitService(new VehicleNewTraitModel()); $VehicleNewAlbumService = new VehicleNewAlbumService(new VehicleNewAlbumModel()); $VehicleNewContentService = new VehicleNewContentService(new VehicleNewContentModel()); $VehicleNewSkusService = new VehicleNewSkusService(new VehicleNewSkusModel()); $VehicleNewSkuAttributesService = new VehicleNewSkuAttributesService(new VehicleNewSkuAttributesModel()); Db::beginTransaction(); try { if(empty($params['model'])){ $params['model'] = 0; } $info = $this->update($id, $params); if (!$info) { throw new BusinessException('提交失败'); } // 异步翻译并写入 hs_vehicle_data_translation 表 (new TranslationService())->queueTranslations( 'vehicleNew', $id, $sourceLocale, $sourceFields ); $askedsId = []; foreach ($askeds as $asked) { $askedsourceFields = $VehicleNewAskedService->extractSourceFields($asked); $asked['vehicle_id'] = $id; if(!empty($asked['id'])){ $askedId = $asked['id']; $askedsId[] = $askedId; $asked_res = $VehicleNewAskedService->update($askedId, $asked); if (!$asked_res) { throw new BusinessException('提交失败:常见问题2'); } } else { unset($asked['id']); $asked_res = $VehicleNewAskedService->create($asked); if (!$asked_res) { throw new BusinessException('提交失败:常见问题1'); } $askedId = $asked_res->id; $askedsId[] = $askedId; } (new TranslationService())->queueTranslations( 'vehicleNewAsked', $askedId, $sourceLocale, $askedsourceFields ); } VehicleNewAskedModel::whereNotIn('id', $askedsId)->where('vehicle_id',$id)->delete(); $traitsId = []; foreach ($traits as $trait) { $traitsourceFields = $VehicleNewTraitService->extractSourceFields($trait); $trait['vehicle_id'] = $id; if(!empty($trait['id'])){ $traitId = $trait['id']; $traitsId[] = $traitId; $trait_res = $VehicleNewTraitService->update($traitId, $trait); if (!$trait_res) { throw new BusinessException('提交失败:车辆特性'); } } else { unset($trait['id']); $trait_res = $VehicleNewTraitService->create($trait); if (!$trait_res) { throw new BusinessException('提交失败:车辆特性'); } $traitId = $trait_res->id; $traitsId[] = $traitId; } (new TranslationService())->queueTranslations( 'vehicleNewTrait', $traitId, $sourceLocale, $traitsourceFields ); } VehicleNewTraitModel::whereNotIn('id', $traitsId)->where('vehicle_id',$id)->delete(); $albumsId = []; foreach ($albums as $album) { $albumsourceFields = $VehicleNewAlbumService->extractSourceFields($album); $album['vehicle_id'] = $id; // $albumId = $album['id']; // $album_res = $VehicleNewAskedService->update($albumId, $album); // if (!$album_res) { // throw new BusinessException('提交失败'); // } if(!empty($album['id'])){ $albumId =$album['id']; $albumsId[] =$albumId; $album_res = $VehicleNewAlbumService->update($albumId,$album); if (!$album_res) { throw new BusinessException('提交失败:车辆图册'); } } else { unset($album['id']); $album_res = $VehicleNewAlbumService->create($album); if (!$album_res) { throw new BusinessException('提交失败:车辆图册1'); } $albumId = $album_res->id; $albumsId[] = $albumId; } (new TranslationService())->queueTranslations( 'vehicleNewAlbum', $albumId, $sourceLocale, $albumsourceFields ); } VehicleNewAlbumModel::whereNotIn('id', $albumsId)->where('vehicle_id',$id)->delete(); $contentsId = []; foreach ($contents as $content) { $contentsourceFields = $VehicleNewContentService->extractSourceFields($content); $content['vehicle_id'] = $id; // $contentId = $content['id']; // $trait_res = $VehicleNewContentService->update($contentId, $content); // if (!$trait_res) { // throw new BusinessException('提交失败'); // } if(!empty($content['id'])){ $contentId =$content['id']; $contentsId[] =$contentId; $content_res = $VehicleNewContentService->update($contentId,$content); if (!$content_res) { throw new BusinessException('提交失败:车辆介绍1'); } } else { unset($content['id']); $content_res = $VehicleNewContentService->create($content); if (!$content_res) { throw new BusinessException('提交失败:车辆介绍'); } $contentId = $content_res->id; $contentsId[] = $contentId; } (new TranslationService())->queueTranslations( 'vehicleNewContent', $contentId, $sourceLocale, $contentsourceFields ); } VehicleNewContentModel::whereNotIn('id', $contentsId)->where('vehicle_id',$id)->delete(); $skusId = []; foreach ($skus as $sku) { if(!empty($sku['id'])){ $skuId =$sku['id']; $skusId[] =$skuId; $skuAttributes = $sku['skuAttributes']; unset($sku['skuAttributes']); $sku_res = $VehicleNewSkusService->update($skuId,$sku); if (!$sku_res) { throw new BusinessException('提交失败5'); } $skuAttributeIds = []; foreach ($skuAttributes as $skuAttribute) { if(!empty($skuAttribute['id'])){ $skuAttributeId = $skuAttribute['id']; $skuAttributeIds[] =$skuAttributeId; $skuAttribute['sku_id'] = $skuId; $skuAttribute_res = $VehicleNewSkuAttributesService->update($skuAttributeId, $skuAttribute); var_dump($skuAttribute_res); if (!$skuAttribute_res) { throw new BusinessException('提交失败4'); } }else{ $skuAttribute['sku_id'] = $sku_res->id; $skuAttribute_res = $VehicleNewSkuAttributesService->create($skuAttribute); $skuAttributeIds[] =$skuAttribute_res->id; if (!$skuAttribute_res) { throw new BusinessException('提交失败3'); } } } VehicleNewSkuAttributesModel::whereNotIn('id', $skuAttributeIds)->where('sku_id',$skuId)->delete(); }else{ $sku['vehicle_id'] = $id; $sku_code = sprintf("%05d", $id); $sku['sku_code'] = rand(100,999).$sku_code[0].' '.substr($sku_code,1).' '.sprintf("%04d", $sku['skuAttributes'][0]['attribute_id']).' '.sprintf("%04d", $sku['skuAttributes'][0]['value_id']); $skuAttributes = $sku['skuAttributes']; unset($sku['skuAttributes']); $sku_res = $VehicleNewSkusService->create($sku); $skusId[] =$sku_res->id; if (!$sku_res) { throw new BusinessException('提交失败2'); } // $skuAttributes = $sku['skuAttributes']; foreach ($skuAttributes as $skuAttribute) { $skuAttribute['sku_id'] = $sku_res->id; $skuAttribute_res = $VehicleNewSkuAttributesService->create($skuAttribute); if (!$skuAttribute_res) { throw new BusinessException('提交失败1'); } } } VehicleNewSkusModel::whereNotIn('id', $skusId)->where('vehicle_id',$id)->delete(); } Db::commit(); return true; } catch (\Throwable $th) { Db::rollBack(); throw $th; } } }