Browse Source

商品保存

kphcdr 1 year ago
parent
commit
3c7a54afab

+ 1 - 0
app/Models/Goods/GoodsCategoryMap.php

@@ -30,6 +30,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
 class GoodsCategoryMap extends BaseModel
 {
     protected $table = "goods_category_map";
+    protected $fillable = ['goods_id', "category_id"];
 
     public function format(...$options)
     {

+ 13 - 1
app/Modules/Admin/Controllers/Admin/GoodsController.php

@@ -80,7 +80,19 @@ class GoodsController extends BaseController
 
     public function store()
     {
-        return $this->ok();
+        $params = $this->valid([
+            "id" => "int",
+            "name" => "required|max:50",
+            "image_list" => "required|array",
+            "category" => "required|array",
+            "spec" => 'required|array',
+            "sku" => 'required|array',
+            'weight' => "int",
+            "desc_html" => "",
+            "spec_attr_html" => "",
+            "faq_html" => "",
+        ]);
+        return $this->ok($this->service->store($params));
     }
 
     public function specPaginate()

+ 76 - 0
app/Modules/Admin/Services/GoodsService.php

@@ -9,6 +9,7 @@ use App\Models\Goods\GoodsSku;
 use App\Models\Goods\SpecAttr;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Arr;
+use Illuminate\Support\Facades\DB;
 
 class GoodsService extends BaseService
 {
@@ -37,6 +38,81 @@ class GoodsService extends BaseService
         ];
     }
 
+    public function store($params)
+    {
+        if ($id = Arr::get($params, "id", 0)) {
+            $goods = Goods::findOrFail($id);
+        } else {
+            $goods = new Goods();
+        }
+
+        DB::transaction(function () use ($params, $goods) {
+
+            $goods->image_list = Arr::get($params, "image_list", []);
+            $goods->spec = Arr::get($params, "spec", []);
+            $goods->name = Arr::get($params, "name", []);
+            $goods->weight = Arr::get($params, "weight", 0);
+            $goods->desc_html = Arr::get($params, "desc_html", "");
+            $goods->spec_attr_html = Arr::get($params, "spec_attr_html", "");
+            $goods->faq_html = Arr::get($params, "faq_html", "");
+            $goods->save();
+            $categoryArr = Arr::get($params, "category", []);
+            GoodsCategoryMap::where("goods_id", $goods->id)->whereNotIn("category_id", Arr::pluck($categoryArr, "id"))->delete();
+            foreach ($categoryArr as $c) {
+                /**
+                 * [
+                 * "id" => 1
+                 * "is_public" => 1
+                 * ]
+                 */
+                GoodsCategoryMap::updateOrCreate([
+                    "goods_id" => $goods->id,
+                    "category_id" => $c['id'],
+                    'is_public' => $c['is_public'],
+                ]);
+            }
+            $skuArr = Arr::get($params, "sku", []);
+            $doNotDelIdArr = [];
+            foreach ($skuArr as $c) {
+                /**
+                 * [
+                 * "id" => 0
+                 * "sn" => "规格型号"
+                 * "url_3d" => null
+                 * "spec_attr" => array:2 [
+                 * 0 => array:2 [
+                 * "id" => 1
+                 * "name" => "属性一"
+                 * ]
+                 * 1 => array:2 [
+                 * "id" => 2
+                 * "name" => "属性二"
+                 * ]
+                 * ]
+                 * "is_use" => 1
+                 * ]
+                 */
+                if ($id = Arr::get($c, "id")) {
+                    $sku = GoodsSku::where("goods_id", $goods->id)->where("id", $id)->first();
+                } else {
+                    $sku = new GoodsSku();
+                    $sku->goods_id = $goods->id;
+                }
+                $sku->sn = Arr::get($c, "sn", "");
+                if (empty($sku->sn)) {
+                    $sku->is_use = 0;
+                }
+                $sku->url_3d = Arr::get($c, "url_3d", "");
+                $sku->spec_attr_list = Arr::get($c, "spec_attr", []);
+                $sku->save();
+                $doNotDelIdArr[] = $sku->id;
+            }
+
+            GoodsSku::where("goods_id", $goods->id)->whereNotIn("id", $doNotDelIdArr)->delete();
+        });
+
+    }
+
     public function info($params)
     {
         $id = $params['id'];