Просмотр исходного кода

[智价云] 采集品规重复校验更新

tangyuanwang 15 часов назад
Родитель
Сommit
6c3244203d

+ 70 - 4
app/Http/Controllers/Manager/Collect/Product.php

@@ -237,6 +237,8 @@ class Product extends Controller
         $all_data = request()->all();
         $product_brand = request('product_brand', '');
         $product_keyword = request('product_keyword', '');
+        $platform_string = $all_data['platform'];
+        if(empty($platform_string)) return json_send(['code' => 'error', 'msg' => '平台不能为空']);
         $all_data['product_brand'] = $product_brand;
         $all_data['product_keyword'] = $product_keyword;
         if (trim($product_keyword) != '') {
@@ -262,7 +264,7 @@ class Product extends Controller
         if ($all_data['sampling_start_time']  && strtotime(date('Y-m-d', $all_data['sampling_start_time']) . '23:59:59') < time()) return json_send(['code' => 'error', 'msg' => '采集开始时间必须大于当前时间']);
         if ($all_data['sampling_end_time']  && $all_data['sampling_end_time'] < time()) return json_send(['code' => 'error', 'msg' => '采集结束时间必须大于当前时间']);
         //查询是否存在
-        $map = ['product_brand' => $product_brand, 'product_name' => $all_data['product_name'], 'product_specs' => $all_data['product_specs'], 'platform' => $all_data['platform']];
+        $map = ['product_brand' => $product_brand, 'product_name' => $all_data['product_name']];
         if ($is_admin != 1 && $company_id != 0) {
             $map['company_id'] = $company_id;
             $all_data['company_id'] = $company_id;
@@ -271,7 +273,38 @@ class Product extends Controller
             $all_data['company_id'] = $admin_company_id;
         }
         $data = $ProductModel->where($map)->first();
-        if ($data)     return json_send(['code' => 'error', 'msg' => '记录已存在']);
+        if (!empty($data)) {
+            //继续校验规格是否存在
+            $product_specs_tring = $all_data['product_specs'];
+            $product_specs = $product_specs_tring ?  explode(',', $product_specs_tring) : '';
+            $product_specs = $product_specs ? array_unique($product_specs) : '';
+            //继续校平台是否存在
+           
+            $platforms = $platform_string ?  explode(',', $platform_string) : '';
+            $platforms = $platforms ? array_unique($platforms) : '';
+
+            $platform_data = $ProductModel->platform_data();
+            foreach ($platforms as $platform) {
+                $product_specs_log = $ProductModel
+                    ->whereRaw("FIND_IN_SET(?, platform)", [$platform])
+                    ->where(['product_brand' => $product_brand, 'product_name' => $all_data['product_name']])
+                    ->where(function ($query) use ($product_specs) {
+                        // 平台条件(固定)
+                        $query->where(function ($query_li) use ($product_specs) {
+
+                            foreach ($product_specs as $product_spec) {
+                                if (empty($product_specs)) continue;
+                                $query_li->orWhereRaw("FIND_IN_SET(?, product_specs)", [$product_spec]);
+                            }
+                        });
+                    })->first();
+                $platform_name = isset($platform_data[$platform]) ? $platform_data[$platform] : '';
+                if (!empty($product_specs_log)) {
+                    return json_send(['code' => 'error', 'msg' => $platform_name.'存在重复的商品规格记录']);
+                }
+            }
+        }
+
         // 写入数据表
         $result     =  $ProductModel->addProduct($all_data);
         // 如果操作失败
@@ -304,6 +337,8 @@ class Product extends Controller
         $all_data = request()->all();
         $product_brand = request('product_brand', '');
         $product_keyword = request('product_keyword', '');
+        $platform_string = $all_data['platform'];
+        if(empty($platform_string)) return json_send(['code' => 'error', 'msg' => '平台不能为空']);
         $all_data['product_brand'] = $product_brand;
         $all_data['product_keyword'] = $product_keyword;
         if (trim($product_keyword) != '') {
@@ -329,14 +364,45 @@ class Product extends Controller
         if ($all_data['sampling_start_time']  && strtotime(date('Y-m-d', $all_data['sampling_start_time']) . '23:59:59') < time()) return json_send(['code' => 'error', 'msg' => '采集开始时间必须大于当前时间']);
         if ($all_data['sampling_end_time']  && $all_data['sampling_end_time'] < time()) return json_send(['code' => 'error', 'msg' => '采集结束时间必须大于当前时间']);
         //查询是否存在
-        $map = ['product_brand' => $product_brand, 'product_name' => $all_data['product_name'], 'product_specs' => $all_data['product_specs'], 'platform' => $all_data['platform']];
+        $map = ['product_brand' => $product_brand, 'product_name' => $all_data['product_name']];
         if ($is_admin != 1 && $company_id != 0) {
             $map['company_id'] = $company_id;
         } else {
             $map['company_id'] = $admin_company_id;
         }
         $data = $ProductModel->where($map)->where('id', '!=', $id)->first();
-        if ($data)     return json_send(['code' => 'error', 'msg' => '记录已存在']);
+        if (!empty($data)) {
+            //继续校验规格是否存在
+            $product_specs_tring = $all_data['product_specs'];
+            $product_specs = $product_specs_tring ?  explode(',', $product_specs_tring) : '';
+            $product_specs = $product_specs ? array_unique($product_specs) : '';
+            //继续校平台是否存在
+           
+            $platforms = $platform_string ?  explode(',', $platform_string) : '';
+            $platforms = $platforms ? array_unique($platforms) : '';
+
+            $platform_data = $ProductModel->platform_data();
+            foreach ($platforms as $platform) {
+                $product_specs_log = $ProductModel
+                    ->whereRaw("FIND_IN_SET(?, platform)", [$platform])
+                    ->where(['product_brand' => $product_brand, 'product_name' => $all_data['product_name']])
+                    ->where('id', '!=', $id)
+                    ->where(function ($query) use ($product_specs) {
+                        // 平台条件(固定)
+                        $query->where(function ($query_li) use ($product_specs) {
+
+                            foreach ($product_specs as $product_spec) {
+                                if (empty($product_specs)) continue;
+                                $query_li->orWhereRaw("FIND_IN_SET(?, product_specs)", [$product_spec]);
+                            }
+                        });
+                    })->first();
+                $platform_name = isset($platform_data[$platform]) ? $platform_data[$platform] : '';
+                if (!empty($product_specs_log)) {
+                    return json_send(['code' => 'error', 'msg' => $platform_name.'存在重复的商品规格记录']);
+                }
+            }
+        }
         // 更新数据表
         $where = ['id' => $id];
         // 权限判断

+ 26 - 0
app/Models/Manager/Collect/Product.php

@@ -25,6 +25,32 @@ class Product extends Model
     // const UPDATED_AT = 'update_time';
 
 
+        /**
+     * 平台定义
+     * @author 唐远望
+     * @version 1.0
+     * @date 2025-12-31
+     */
+    public function platform_data()
+    {
+        //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药11=药房网
+        $platform_data = [
+            '1' => '淘宝',
+            '2' => '京东',
+            '3' => '拼多多',
+            '4' => '美团',
+            '5' => '药师帮',
+            '6' => '1药城',
+            '7' => '药久久',
+            '8' => '药易购',
+            '9' => '药帮忙',
+            '10' => '熊猫药药',
+            '11' => '药房网',
+        ];
+        return $platform_data;
+    }
+
+
     /**
      * 添加
      * @author 唐远望