Browse Source

[智价云] 挂网平台数据统计

tangyuanwang 2 weeks ago
parent
commit
7fbb5c85bc

+ 295 - 2
app/Http/Controllers/Manager/Statistics/BasicPanel.php

@@ -311,7 +311,7 @@ class BasicPanel extends Controller
                 ->orderby('count', 'desc')
                 ->get()->toArray();
             $province_totle_count = 0;
-            if(!empty($result)){
+            if (!empty($result)) {
                 $province_totle_count = array_sum(array_column($result, 'count'));
                 //计算占比
                 foreach ($result as $key => $value) {
@@ -388,7 +388,7 @@ class BasicPanel extends Controller
                 ->orderby('count', 'desc')
                 ->get()->toArray();
             $city_totle_count = 0;
-            if(!empty($result)){
+            if (!empty($result)) {
                 $city_totle_count = array_sum(array_column($result, 'count'));
                 //计算占比
                 foreach ($result as $key => $value) {
@@ -742,4 +742,297 @@ class BasicPanel extends Controller
             return json_send(['code' => 'error', 'msg' => '获取失败:' . $e->getMessage()]);
         }
     }
+
+    /**
+     * 低价挂网平台分布
+     * @author 唐远望
+     * @version   1.0
+     * @date      2026-02-27
+     * 
+     */
+    public function get_low_price_platform_count(request $request, LowPriceGoodsModel $LowPriceGoodsModel)
+    {
+        $request->scene('get_low_price_platform_count')->validate();
+        $admin_company_id = request('admin_company_id', '0');
+        $company_id = request('access_token.company_id', '0');
+        $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
+
+        //终端类型B端、C端、OTO
+        $terminal_type = request('terminal_type', '');
+        $product_name = request('product_name', ''); //商品名称
+        $yesterdayStart = Carbon::yesterday()->startOfDay()->getTimestamp(); // 昨天开始时间 00:00:00
+        $yesterdayEnd = Carbon::yesterday()->endOfDay()->getTimestamp(); // 昨天结束时间 23:59:59
+        $start_time_string = request('start_time', '');
+        $end_time_string = request('end_time', '');
+        $start_time = $start_time_string ? strtotime($start_time_string . ' 00:00:00') : $yesterdayStart;
+        $end_time = $end_time_string ? strtotime($end_time_string . ' 23:59:59') : $yesterdayEnd;
+        $todayStart = Carbon::today()->startOfDay()->getTimestamp(); // 今天开始时间 00:00:00
+        // if ($start_time > $todayStart || $end_time > $todayStart) return  json_send(['code' => 'error', 'msg' => '不支持查询今天或以后时间', 'data' => '']);
+        // 时间条件
+        $map  = [];
+        if ($start_time) $map[] = ['insert_time', '>=', $start_time];
+        if ($end_time) $map[]   = ['insert_time', '<=', $end_time];
+        // 权限判断
+        if ($is_admin != 1 && $company_id != 0) {
+            $map[] = ['company_id', '=', $company_id];
+        } else {
+            $map[] = ['company_id', '=', $admin_company_id];
+        }
+        if ($product_name) $map[] = ['product_name', 'like', '%' . $product_name . '%'];
+        // 禁止挂网平台分布统计
+        $LowPriceGoodsModel = $LowPriceGoodsModel->query();
+        if ($terminal_type) {
+            $platform = [];
+            switch ($terminal_type) {
+                case '1': //B端:药师帮、1药城、药久久、药易购、药帮忙、熊猫药药
+                    $platform = ['0', '5', '6', '7', '8', '9', '10']; //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药
+                    break;
+                case '2': //C端:美团、拼多多、天猫、京东
+                    $platform = ['0', '1', '2', '3', '4']; //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药
+                    break;
+                case '3': //OTO:美团买药、淘宝闪送、京东秒送
+                    $platform = ['0'];
+                    break;
+                default:
+                    # code...
+                    break;
+            }
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('platform', $platform);
+        }
+        try {
+            // 假设 LowPriceGoodsModel 中有 platform 字段,表示平台信息
+            // 查询指定时间范围内的数据,并按 platform 分组统计数量
+            $result = $LowPriceGoodsModel->where($map)->where('status', 0)
+                ->select(['platform', DB::raw('count(platform) as count')])
+                ->groupby('platform')
+                ->orderby('count', 'desc')
+                ->get()->toArray();
+            $platform_totle_count = 0;
+            if (!empty($result)) {
+                $platform_totle_count = array_sum(array_column($result, 'count'));
+                foreach ($result as $key => $value) {
+                    $result[$key]['percent'] = round(($value['count'] / $platform_totle_count) * 100, 2);
+                }
+            }
+            return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $result]);
+        } catch (\Exception $e) {
+            return json_send(['code' => 'error', 'msg' => '获取失败:' . $e->getMessage()]);
+        }
+    }
+    /**
+     * 低价挂网平台省份分布
+     * @author 唐远望
+     * @version   1.0
+     * @date      2026-02-27
+     * 
+     */
+    public function get_low_price_platform_province_count(request $request, LowPriceGoodsModel $LowPriceGoodsModel)
+    {
+        $request->scene('get_low_price_platform_province_count')->validate();
+        $admin_company_id = request('admin_company_id', '0');
+        $company_id = request('access_token.company_id', '0');
+        $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
+
+        //终端类型B端、C端、OTO
+        $terminal_type = request('terminal_type', '');
+        $product_name = request('product_name', ''); //商品名称
+        $yesterdayStart = Carbon::yesterday()->startOfDay()->getTimestamp(); // 昨天开始时间 00:00:00
+        $yesterdayEnd = Carbon::yesterday()->endOfDay()->getTimestamp(); // 昨天结束时间 23:59:59
+        $start_time_string = request('start_time', '');
+        $end_time_string = request('end_time', '');
+        $start_time = $start_time_string ? strtotime($start_time_string . ' 00:00:00') : $yesterdayStart;
+        $end_time = $end_time_string ? strtotime($end_time_string . ' 23:59:59') : $yesterdayEnd;
+        $todayStart = Carbon::today()->startOfDay()->getTimestamp(); // 今天开始时间 00:00:00
+        // if ($start_time > $todayStart || $end_time > $todayStart) return  json_send(['code' => 'error', 'msg' => '不支持查询今天或以后时间', 'data' => '']);
+        // 时间条件
+        $map  = [];
+        if ($start_time) $map[] = ['insert_time', '>=', $start_time];
+        if ($end_time) $map[]   = ['insert_time', '<=', $end_time];
+        // 权限判断
+        if ($is_admin != 1 && $company_id != 0) {
+            $map[] = ['company_id', '=', $company_id];
+        } else {
+            $map[] = ['company_id', '=', $admin_company_id];
+        }
+        if ($product_name) $map[] = ['product_name', 'like', '%' . $product_name . '%'];
+        // 禁止挂网平台分布统计
+        $LowPriceGoodsModel = $LowPriceGoodsModel->query();
+        if ($terminal_type) {
+            $platform = [];
+            switch ($terminal_type) {
+                case '1': //B端:药师帮、1药城、药久久、药易购、药帮忙、熊猫药药
+                    $platform = ['0', '5', '6', '7', '8', '9', '10']; //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药
+                    break;
+                case '2': //C端:美团、拼多多、天猫、京东
+                    $platform = ['0', '1', '2', '3', '4']; //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药
+                    break;
+                case '3': //OTO:美团买药、淘宝闪送、京东秒送
+                    $platform = ['0'];
+                    break;
+                default:
+                    # code...
+                    break;
+            }
+            $LowPriceGoodsModel = $LowPriceGoodsModel->whereIn('platform', $platform);
+        }
+        try {
+            // 假设 LowPriceGoodsModel 中有 province 字段,表示省份信息
+            // 查询指定时间范围内的数据,并按 province 分组统计数量
+            $result = $LowPriceGoodsModel->where($map)->where('status', 0)
+                ->select(['province_name', DB::raw('count(province_name) as count')])
+                ->groupby('province_name')
+                ->orderby('count', 'desc')
+                ->get();
+            return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $result]);
+        } catch (\Exception $e) {
+            return json_send(['code' => 'error', 'msg' => '获取失败:' . $e->getMessage()]);
+        }
+    }
+
+
+
+    /**
+     * 禁止挂网平台分布
+     * @author 唐远望
+     * @version   1.0
+     * @date      2026-02-27
+     * 
+     */
+    public function get_violation_platform_count(request $request, ViolationProductModel $violationProductModel)
+    {
+        $request->scene('get_violation_platform_count')->validate();
+        $admin_company_id = request('admin_company_id', '0');
+        $company_id = request('access_token.company_id', '0');
+        $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
+        //终端类型B端、C端、OTO
+        $terminal_type = request('terminal_type', '');
+        $product_name = request('product_name', ''); //商品名称
+        $yesterdayStart = Carbon::yesterday()->startOfDay()->getTimestamp(); // 昨天开始时间 00:00:00
+        $yesterdayEnd = Carbon::yesterday()->endOfDay()->getTimestamp(); // 昨天结束时间 23:59:59
+        $start_time_string = request('start_time', '');
+        $end_time_string = request('end_time', '');
+        $start_time = $start_time_string ? strtotime($start_time_string . ' 00:00:00') : $yesterdayStart;
+        $end_time = $end_time_string ? strtotime($end_time_string . ' 23:59:59') : $yesterdayEnd;
+        $todayStart = Carbon::today()->startOfDay()->getTimestamp(); // 今天开始时间 00:00:00
+        // if ($start_time > $todayStart || $end_time > $todayStart) return  json_send(['code' => 'error', 'msg' => '不支持查询今天或以后时间', 'data' => '']);
+        // 时间条件
+        $map  = [];
+        if ($start_time) $map[] = ['insert_time', '>=', $start_time];
+        if ($end_time) $map[]   = ['insert_time', '<=', $end_time];
+        // 权限判断
+        if ($is_admin != 1 && $company_id != 0) {
+            $map[] = ['company_id', '=', $company_id];
+        } else {
+            $map[] = ['company_id', '=', $admin_company_id];
+        }
+        if ($product_name) $map[] = ['product_name', 'like', '%' . $product_name . '%'];
+        // 禁止挂网平台分布统计
+        $violationProductModel = $violationProductModel->query();
+        if ($terminal_type) {
+            $platform = [];
+            switch ($terminal_type) {
+                case '1': //B端:药师帮、1药城、药久久、药易购、药帮忙、熊猫药药
+                    $platform = ['0', '5', '6', '7', '8', '9', '10']; //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药
+                    break;
+                case '2': //C端:美团、拼多多、天猫、京东
+                    $platform = ['0', '1', '2', '3', '4']; //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药
+                    break;
+                case '3': //OTO:美团买药、淘宝闪送、京东秒送
+                    $platform = ['0'];
+                    break;
+                default:
+                    # code...
+                    break;
+            }
+            $violationProductModel = $violationProductModel->whereIn('platform', $platform);
+        }
+        try {
+            // 假设 ViolationProductModel 中有 platform 字段,表示平台信息
+            // 查询指定时间范围内的数据,并按 platform 分组统计数量
+            $result = $violationProductModel->where($map)->where('status', 0)
+                ->select(['platform', DB::raw('count(platform) as count')])
+                ->groupby('platform')
+                ->orderby('count', 'desc')
+                ->get()->toArray();
+            $platform_totle_count = 0;
+            if (!empty($result)) {
+                $platform_totle_count = array_sum(array_column($result, 'count'));
+                foreach ($result as $key => $value) {
+                    $result[$key]['percent'] = round(($value['count'] / $platform_totle_count) * 100, 2);
+                }
+            }
+            return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $result]);
+        } catch (\Exception $e) {
+            return json_send(['code' => 'error', 'msg' => '获取失败:' . $e->getMessage()]);
+        }
+    }
+
+    /**
+     * 禁止挂网平台省份分布
+     * @author 唐远望
+     * @version   1.0
+     * @date      2026-02-27
+     * 
+     */
+    public function get_violation_platform_province_count(request $request, ViolationProductModel $violationProductModel)
+    {
+        $request->scene('get_violation_platform_province_count')->validate();
+        $admin_company_id = request('admin_company_id', '0');
+        $company_id = request('access_token.company_id', '0');
+        $is_admin = request('access_token.is_admin', '0'); //是否管理员操作 0=是1=否
+        //终端类型B端、C端、OTO
+        $terminal_type = request('terminal_type', '');
+        $product_name = request('product_name', ''); //商品名称
+        $yesterdayStart = Carbon::yesterday()->startOfDay()->getTimestamp(); // 昨天开始时间 00:00:00
+        $yesterdayEnd = Carbon::yesterday()->endOfDay()->getTimestamp(); // 昨天结束时间 23:59:59
+        $start_time_string = request('start_time', '');
+        $end_time_string = request('end_time', '');
+        $start_time = $start_time_string ? strtotime($start_time_string . ' 00:00:00') : $yesterdayStart;
+        $end_time = $end_time_string ? strtotime($end_time_string . ' 23:59:59') : $yesterdayEnd;
+        $todayStart = Carbon::today()->startOfDay()->getTimestamp(); // 今天开始时间 00:00:00
+        // if ($start_time > $todayStart || $end_time > $todayStart) return  json_send(['code' => 'error', 'msg' => '不支持查询今天或以后时间', 'data' => '']);
+        // 时间条件
+        $map  = [];
+        if ($start_time) $map[] = ['insert_time', '>=', $start_time];
+        if ($end_time) $map[]   = ['insert_time', '<=', $end_time];
+        // 权限判断
+        if ($is_admin != 1 && $company_id != 0) {
+            $map[] = ['company_id', '=', $company_id];
+        } else {
+            $map[] = ['company_id', '=', $admin_company_id];
+        }
+        if ($product_name) $map[] = ['product_name', 'like', '%' . $product_name . '%'];
+        // 禁止挂网平台分布统计
+        $violationProductModel = $violationProductModel->query();
+        if ($terminal_type) {
+            $platform = [];
+            switch ($terminal_type) {
+                case '1': //B端:药师帮、1药城、药久久、药易购、药帮忙、熊猫药药
+                    $platform = ['0', '5', '6', '7', '8', '9', '10']; //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药
+                    break;
+                case '2': //C端:美团、拼多多、天猫、京东
+                    $platform = ['0', '1', '2', '3', '4']; //平台0=全部,1=淘宝,2=京东,3=拼多多,4=美团,5=药师帮,6=1药城,7=药久久,8=药易购,9=药帮忙,10=熊猫药药
+                    break;
+                case '3': //OTO:美团买药、淘宝闪送、京东秒送
+                    $platform = ['0'];
+                    break;
+                default:
+                    # code...
+                    break;
+            }
+            $violationProductModel = $violationProductModel->whereIn('platform', $platform);
+        }
+        try {
+            // 假设 ViolationProductModel 中有 platform 字段,表示平台信息
+            // 查询指定时间范围内的数据,并按 platform 分组统计数量
+            $result = $violationProductModel->where($map)->where('status', 0)
+                ->select(['province_name', DB::raw('count(province_name) as count')])
+                ->groupby(['province_name'])
+                ->orderby('count', 'desc')
+                ->get();
+            return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $result]);
+        } catch (\Exception $e) {
+            return json_send(['code' => 'error', 'msg' => '获取失败:' . $e->getMessage()]);
+        }
+    }
 }

+ 4 - 0
app/Http/Requests/Manager/Statistics/BasicPanel.php

@@ -54,6 +54,10 @@ class BasicPanel extends BaseRequest
         'get_violation_city_count' => [],
         'get_low_price_province_count' => [],
         'get_low_price_city_count' => [],
+        'get_low_price_platform_count' => [],
+        'get_low_price_platform_province_count' => [],
+        'get_violation_platform_count' =>[],
+        'get_violation_platform_province_count' =>[],
     ];
 
     /**

+ 9 - 1
routes/manager.php

@@ -345,4 +345,12 @@ Route::any('statistics/basic_panel/get_low_price_company_count', [App\Http\Contr
 //新报表统计-低价违规省份统计排行
 Route::any('statistics/basic_panel/get_low_price_province_count', [App\Http\Controllers\Manager\Statistics\BasicPanel::class, 'get_low_price_province_count']);
 //新报表统计-低价违规城市统计排行
-Route::any('statistics/basic_panel/get_low_price_city_count', [App\Http\Controllers\Manager\Statistics\BasicPanel::class, 'get_low_price_city_count']);
+Route::any('statistics/basic_panel/get_low_price_city_count', [App\Http\Controllers\Manager\Statistics\BasicPanel::class, 'get_low_price_city_count']);
+//新报表统计-低价挂网平台分布
+Route::any('statistics/basic_panel/get_low_price_platform_count', [App\Http\Controllers\Manager\Statistics\BasicPanel::class, 'get_low_price_platform_count']);
+//新报表统计-低价挂网平台省份分布
+Route::any('statistics/basic_panel/get_low_price_platform_province_count', [App\Http\Controllers\Manager\Statistics\BasicPanel::class, 'get_low_price_platform_province_count']);
+//新报表统计-禁止挂网平台分布
+Route::any('statistics/basic_panel/get_violation_platform_count', [App\Http\Controllers\Manager\Statistics\BasicPanel::class, 'get_violation_platform_count']);
+//新报表统计-禁止挂网平台省份分布
+Route::any('statistics/basic_panel/get_violation_platform_province_count', [App\Http\Controllers\Manager\Statistics\BasicPanel::class, 'get_violation_platform_province_count']);