|
@@ -0,0 +1,146 @@
|
|
|
+<?php
|
|
|
+namespace App\MicroApi\Services;
|
|
|
+
|
|
|
+use App\MicroApi\Exceptions\RpcException;
|
|
|
+use App\MicroApi\Facades\HttpClient;
|
|
|
+use App\MicroApi\Items\ProductItem;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
+
|
|
|
+class ProductService
|
|
|
+{
|
|
|
+ use DataHandler;
|
|
|
+
|
|
|
+ protected $servicePrefix = '/product/productService';
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $product
|
|
|
+ * @return ProductItem
|
|
|
+ * @throws RpcException
|
|
|
+ */
|
|
|
+ public function create(ProductItem $product)
|
|
|
+ {
|
|
|
+ $path = $this->servicePrefix . '/create';
|
|
|
+ $options = ['json' => $product];
|
|
|
+ try {
|
|
|
+ $response = HttpClient::post($path, $options);
|
|
|
+ } catch (\Exception $exception) {
|
|
|
+ Log::error("MicroApi.ProductService.Create Call Failed: " . $exception->getMessage());
|
|
|
+ throw new RpcException("调用远程服务失败");
|
|
|
+ }
|
|
|
+ $result = $this->decode($response->getBody()->getContents());
|
|
|
+ return isset($result->product) ? $product->fillAttributes($result->product) : null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取商品集合
|
|
|
+ * @return \Illuminate\Support\Collection|null
|
|
|
+ * @throws RpcException
|
|
|
+ */
|
|
|
+ public function getAll()
|
|
|
+ {
|
|
|
+ $path = $this->servicePrefix . '/getAll';
|
|
|
+ try {
|
|
|
+ $response = HttpClient::get($path);
|
|
|
+ } catch (\Exception $exception) {
|
|
|
+ Log::error("MicroApi.ProductService.GetAll Call Failed: " . $exception->getMessage());
|
|
|
+ throw new RpcException("调用远程服务失败");
|
|
|
+ }
|
|
|
+ $result = $this->decode($response->getBody()->getContents());
|
|
|
+ // 返回商品集合
|
|
|
+ return isset($result->products) ? collect($result->products)->map(function ($item) {
|
|
|
+ $product = new ProductItem();
|
|
|
+ return $product->fillAttributes($item);
|
|
|
+ })->reject(function ($item){
|
|
|
+ return empty($item);
|
|
|
+ }) : null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据商品 ID 获取商品信息
|
|
|
+ * @param $id
|
|
|
+ * @param $withRelations
|
|
|
+ * @return ProductItem|null
|
|
|
+ * @throws RpcException
|
|
|
+ */
|
|
|
+ public function getById($id, $withRelations = false)
|
|
|
+ {
|
|
|
+ if ($withRelations == false) {
|
|
|
+ $path = $this->servicePrefix . '/get';
|
|
|
+ } else {
|
|
|
+ $path = $this->servicePrefix . '/getDetail';
|
|
|
+ }
|
|
|
+ $product = new ProductItem();
|
|
|
+ $product->id = $id;
|
|
|
+ $options = ['json' => $product];
|
|
|
+ try {
|
|
|
+ $response = HttpClient::post($path, $options);
|
|
|
+ } catch (\Exception $exception) {
|
|
|
+ Log::error("MicroApi.ProductService.Get Call Failed: " . $exception->getMessage());
|
|
|
+ throw new RpcException("调用远程服务失败");
|
|
|
+ }
|
|
|
+ $result = $this->decode($response->getBody()->getContents());
|
|
|
+ return isset($result->product) ? $product->fillAttributes($result->product) : null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过商品别名获取明细
|
|
|
+ * @param $slug
|
|
|
+ * @return ProductItem|null
|
|
|
+ * @throws RpcException
|
|
|
+ */
|
|
|
+ public function getBySlug($slug)
|
|
|
+ {
|
|
|
+ $path = $this->servicePrefix . '/get';
|
|
|
+ $product = new ProductItem();
|
|
|
+ $product->slug = $slug;
|
|
|
+ $options = ['json' => $product];
|
|
|
+ try {
|
|
|
+ $response = HttpClient::post($path, $options);
|
|
|
+ } catch (\Exception $exception) {
|
|
|
+ Log::error("MicroApi.ProductService.Get Call Failed: " . $exception->getMessage());
|
|
|
+ throw new RpcException("调用远程服务失败");
|
|
|
+ }
|
|
|
+ $result = $this->decode($response->getBody()->getContents());
|
|
|
+ return isset($result->user) ? $product->fillAttributes($product) : null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新商品信息
|
|
|
+ * @param ProductItem $product
|
|
|
+ * @return ProductItem
|
|
|
+ * @throws RpcException
|
|
|
+ */
|
|
|
+ public function update(ProductItem $product)
|
|
|
+ {
|
|
|
+ $path = $this->servicePrefix . '/update';
|
|
|
+ $options = ['json' => $product];
|
|
|
+ try {
|
|
|
+ $response = HttpClient::post($path, $options);
|
|
|
+ } catch (\Exception $exception) {
|
|
|
+ Log::error("MicroApi.ProductService.Update Call Failed: " . $exception->getMessage());
|
|
|
+ throw new RpcException("调用远程服务失败");
|
|
|
+ }
|
|
|
+ $result = $this->decode($response->getBody()->getContents());
|
|
|
+ return $product->fillAttributes($result->product);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除商品信息
|
|
|
+ * @param $productId
|
|
|
+ * @return bool
|
|
|
+ * @throws RpcException
|
|
|
+ */
|
|
|
+ public function delete($productId)
|
|
|
+ {
|
|
|
+ $path = $this->servicePrefix . '/delete';
|
|
|
+ $options = ['json' => ['id' => $productId]];
|
|
|
+ try {
|
|
|
+ $response = HttpClient::post($path, $options);
|
|
|
+ } catch (\Exception $exception) {
|
|
|
+ Log::error("MicroApi.ProductService.Delete Call Failed: " . $exception->getMessage());
|
|
|
+ throw new RpcException("调用远程服务失败");
|
|
|
+ }
|
|
|
+ $result = $this->decode($response->getBody()->getContents());
|
|
|
+ return empty($result->product) ? true : false;
|
|
|
+ }
|
|
|
+}
|