diff --git a/app/console/controller/VehicleNewController.php b/app/console/controller/VehicleNewController.php index 938b68d..4a09ab5 100644 --- a/app/console/controller/VehicleNewController.php +++ b/app/console/controller/VehicleNewController.php @@ -40,7 +40,7 @@ class VehicleNewController extends BaseController protected function postProcessItem(array $item, string $scene): array { - if ($scene === 'default') { + if ($scene === 'default' || $scene === 'show') { $result = [ 'id' => $item['id'], 'vin' => $item['vin'], @@ -55,32 +55,53 @@ class VehicleNewController extends BaseController 'condition_desc' => isset($item['translation']) ? $item['translation']['condition_desc'] : '', 'created_at' => date('Y-m-d H:i:s', $item['created_at']), 'updated_at' => date('Y-m-d H:i:s', $item['updated_at']), + + 'brand_name' => is_array($item['brand']) ? $item['brand']['translation']['name'] : '', + 'energy_name' => is_array($item['energy']) ? $item['energy']['translation']['name'] : '', + 'type_name' => isset($item['types']) ? $item['types']['translation']['name'] : '', + 'model_name' => isset($item['models']) ? $item['models']['translation']['name'] : '', ]; + if ($item['cover']) { + $result['cover_full'] = (new \app\mzl\modules\upload\service\OssService())->generatePrivateUrl($item['cover']); + } + if ($item['video']) { + $result['video_full'] = (new \app\mzl\modules\upload\service\OssService())->generatePrivateUrl($item['video']); + } foreach ($item['asked'] as $asked) { - $result['asked']['id'] = $asked['id']; - $result['asked']['vehicle_id'] = $asked['vehicle_id']; - $result['asked']['status'] = $asked['status']; - $result['asked']['title'] = isset($asked['translation']) ? $asked['translation']['title']:''; - $result['asked']['content'] = isset($asked['translation']) ? $asked['translation']['content']:''; + $askedRes['id'] = $asked['id']; + $askedRes['vehicle_id'] = $asked['vehicle_id']; + $askedRes['status'] = $asked['status']; + $askedRes['title'] = isset($asked['translation']) ? $asked['translation']['title']:''; + $askedRes['content'] = isset($asked['translation']) ? $asked['translation']['content']:''; + $result['asked'][] = $askedRes; } foreach ($item['trait'] as $trait) { - $result['trait']['id'] = $trait['id']; - $result['trait']['vehicle_id'] = $trait['vehicle_id']; - $result['trait']['status'] = $trait['status']; - $result['trait']['title'] = isset($trait['translation']) ? $trait['translation']['title']:''; - $result['trait']['content'] = isset($trait['translation']) ? $trait['translation']['content']:''; + $traitRes['id'] = $trait['id']; + $traitRes['vehicle_id'] = $trait['vehicle_id']; + $traitRes['status'] = $trait['status']; + $traitRes['title'] = isset($trait['translation']) ? $trait['translation']['title']:''; + $traitRes['content'] = isset($trait['translation']) ? $trait['translation']['content']:''; + $result['trait'][] = $traitRes; } foreach ($item['album'] as $album) { - $result['album']['id'] = $album['id']; - $result['album']['vehicle_id'] = $album['vehicle_id']; - $result['album']['status'] = $album['status']; - $result['album']['alt'] = isset($album['translation']) ? $album['translation']['alt']:''; + $albumRes['id'] = $album['id']; + $albumRes['vehicle_id'] = $album['vehicle_id']; + $albumRes['pic'] = $album['pic']; + $albumRes['status'] = $album['status']; + $albumRes['alt'] = isset($album['translation']) ? $album['translation']['alt']:''; + + if ($albumRes['pic']) { + $albumRes['pic_full'] = (new \app\mzl\modules\upload\service\OssService())->generatePrivateUrl($albumRes['pic']); + } + + $result['album'][] = $albumRes; } foreach ($item['content'] as $content) { - $result['content']['id'] = $content['id']; - $result['content']['vehicle_id'] = $content['vehicle_id']; - $result['content']['status'] = $content['status']; - $result['content']['content'] = isset($content['translation']) ? $content['translation']['content']:''; + $contentRes['id'] = $content['id']; + $contentRes['vehicle_id'] = $content['vehicle_id']; + $contentRes['status'] = $content['status']; + $contentRes['content'] = isset($content['translation']) ? $content['translation']['content']:''; + $result['content'][] = $contentRes; } return $result; } diff --git a/app/console/service/VehicleNewContentService.php b/app/console/service/VehicleNewContentService.php index cc9795d..3d95f2b 100644 --- a/app/console/service/VehicleNewContentService.php +++ b/app/console/service/VehicleNewContentService.php @@ -56,4 +56,9 @@ class VehicleNewContentService extends BaseService // } ]; } + + // 声明需要多语言翻译 + protected array $translatable = [ + 'content', + ]; } \ No newline at end of file diff --git a/app/console/service/VehicleNewService.php b/app/console/service/VehicleNewService.php index e14486b..e662fb1 100644 --- a/app/console/service/VehicleNewService.php +++ b/app/console/service/VehicleNewService.php @@ -50,6 +50,10 @@ class VehicleNewService extends BaseService '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'], 'sorts' => [ ['field' => 'id', 'direction' => 'desc'] ], @@ -77,6 +81,10 @@ class VehicleNewService extends BaseService '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'], 'sorts' => [ ['field' => 'id', 'direction' => 'desc'] ], @@ -169,7 +177,7 @@ class VehicleNewService extends BaseService $albumsourceFields = $VehicleNewAlbumService->extractSourceFields($album); $album['vehicle_id'] = $info->id; $album_res = $VehicleNewAlbumService->create($album); - if (!$trait_res) { + if (!$album_res) { throw new BusinessException('提交失败'); } (new TranslationService())->queueTranslations( @@ -183,14 +191,14 @@ class VehicleNewService extends BaseService foreach ($contents as $content) { $contentsourceFields = $VehicleNewContentService->extractSourceFields($content); $content['vehicle_id'] = $info->id; - $trait_res = $VehicleNewContentService->create($content); - if (!$trait_res) { + $content_res = $VehicleNewContentService->create($content); + if (!$content_res) { throw new BusinessException('提交失败'); } (new TranslationService())->queueTranslations( 'vehicleNewContent', - $trait_res->id, + $content_res->id, $sourceLocale, $contentsourceFields ); @@ -213,18 +221,35 @@ class VehicleNewService extends BaseService throw new \InvalidArgumentException("请传递至少一条 {$sourceLocale} 语言的翻译字段"); }; - $album = []; - $trans = []; - $albums = VehicleNewAlbumModel::VEHICLE_New_ALBUM_FIELDS; - foreach ($params as $ko => $vo) { - if (in_array($ko, $albums)) { - $album[$ko] = $vo ?? ''; - } elseif (in_array($ko, VehicleNewModel::TRANS_FIELDS)) { - $trans[$ko] = $vo ?? ''; - }else{ - $data[$ko] = $vo ?? ''; - } - } + $askeds = $params['asked']; + unset($params['asked']); + $traits = $params['trait']; + unset($params['trait']); + $albums = $params['album']; + unset($params['album']); + $contents = $params['content']; + unset($params['content']); + $VehicleNewAskedService = new VehicleNewAskedService(new VehicleNewAskedModel()); + $VehicleNewTraitService = new VehicleNewTraitService(new VehicleNewTraitModel()); + $VehicleNewAlbumService = new VehicleNewAlbumService(new VehicleNewAlbumModel()); + $VehicleNewContentService = new VehicleNewContentService(new VehicleNewContentModel()); +// foreach ($params as $ko => $vo) { +// if (in_array($ko, $albums)) { +// $album[$ko] = $vo ?? ''; +// } elseif (in_array($ko, $albums)) { +// $album[$ko] = $vo ?? ''; +// } elseif (in_array($ko, $albums)) { +// $album[$ko] = $vo ?? ''; +// } elseif (in_array($ko, $albums)) { +// $album[$ko] = $vo ?? ''; +// } elseif (in_array($ko, $albums)) { +// $album[$ko] = $vo ?? ''; +// } elseif (in_array($ko, VehicleNewModel::TRANS_FIELDS)) { +// $trans[$ko] = $vo ?? ''; +// }else{ +// $data[$ko] = $vo ?? ''; +// } +// } Db::beginTransaction(); try { @@ -235,22 +260,149 @@ class VehicleNewService extends BaseService // 异步翻译并写入 hs_vehicle_data_translation 表 (new TranslationService())->queueTranslations( - 'vehicle', + 'vehicleNew', $id, $sourceLocale, $sourceFields ); - if ($album) { - // $album['vehicle_data_id'] = $info->id; - $albumModel = new VehicleAlbumModel(); - if (!$albumModel->updateOrCreate( - ['vehicle_data_id' => $id], - $album - )) { - throw new BusinessException('提交失败'); + foreach ($askeds as $asked) { + $askedsourceFields = $VehicleNewAskedService->extractSourceFields($asked); + $asked['vehicle_id'] = $id; + $askedsId = []; + if(!empty($asked['id'])){ + $askedId = $asked['id']; + $askedsId[] = $askedId; + $asked_res = $VehicleNewAskedService->update($askedId, $asked); + if (!$asked_res) { + throw new BusinessException('提交失败:常见问题'); + } + } else { + $asked_res = $VehicleNewAskedService->create($asked); + if (!$asked_res) { + throw new BusinessException('提交失败:常见问题'); + } + $askedId = $asked_res->id; + $askedsId[] = $askedId; } + (new TranslationService())->queueTranslations( + 'vehicleNewAsked', + $askedId, + $sourceLocale, + $askedsourceFields + ); } + VehicleNewAskedModel::whereNotIn('id', $askedsId)->where('vehicle_id',$id)->delete(); + + foreach ($traits as $trait) { + $traitsourceFields = $VehicleNewTraitService->extractSourceFields($trait); + $trait['vehicle_id'] = $id; + $traitsId = []; + if(!empty($trait['id'])){ + $traitId = $trait['id']; + $traitsId[] = $traitId; + $trait_res = $VehicleNewAskedService->update($traitId, $trait); + if (!$trait_res) { + throw new BusinessException('提交失败:车辆特性'); + } + } else { + $trait_res = $VehicleNewAskedService->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(); + + 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('提交失败'); +// } + + $albumsId = []; +// var_dump(!empty($album['id'])); + $album['vehicle_id'] = 78; + if(!empty($album['id'])){ + $albumId =$album['id']; + $albumsId[] =$albumId; + $album_res = $VehicleNewAlbumService->update($albumId,$album); + if (!$album_res) { + throw new BusinessException('提交失败:车辆图册'); + } + } else { + $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 + ); + } + + 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('提交失败'); +// } + + $contentsId = []; + if(!empty($content['id'])){ + $contentId =$content['id']; + $contentsId[] =$contentId; + $content['vehicle_id'] = 78; + $content_res = $VehicleNewContentService->update($contentId,$content); + if (!$content_res) { + throw new BusinessException('提交失败:车辆介绍1'); + } + } else { + $content_res = $VehicleNewAskedService->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(); +// if ($album) { +// // $album['vehicle_data_id'] = $info->id; +// $albumModel = new VehicleAlbumModel(); +// if (!$albumModel->updateOrCreate( +// ['vehicle_data_id' => $id], +// $album +// )) { +// throw new BusinessException('提交失败'); +// } +// } // $applyModel = new VehicleApplyModel(); // if (!$applyModel->create([