repository = $repository; $this->areaCode = $this->request->param('areaCode', ''); $this->streetCode = $this->request->param('streetCode', ''); if ($this->areaCode == '' && $this->streetCode == '') { throw new ValidateException('请选择地区'); } } // 今昨 商品和店铺统计信息 public function productCount() { $totalProductCounInfo = $this->countTotalProduct(); $newProductCountInfo = $this->countNewProduct(); $merchantCountInfo = $this->countMerchant(); return \app('json')->success(compact('totalProductCounInfo', 'newProductCountInfo', 'merchantCountInfo')); } private function countTotalProduct() { // 今日商品总数 截止到今日商品总数 $todayProductCount = Db::name('store_product')->alias('p')->field('count(p.product_id) as think_count') ->join('merchant m', 'm.mer_id = p.mer_id') ->whereTime('p.create_time', '<=', time()) ->where(function ($query){ if ($this->streetCode != '') { $query->where('m.street_id', $this->streetCode); } else { $query->where('m.area_id', $this->streetCode); } }) ->count(); // 昨日商品总数 $yestertodayProductCount = Db::name('store_product')->alias('p')->field('count(p.product_id) as think_count') ->join('merchant m', 'm.mer_id = p.mer_id') ->whereTime('p.create_time', '<=', strtotime(date('Y-m-d', time()))-1) ->where(function ($query){ if ($this->streetCode != '') { $query->where('m.street_id', $this->streetCode); } else { $query->where('m.area_id', $this->streetCode); } }) ->count(); // 上周商品总数 $onWeekAgo = strtotime('-7 days'); // 查询截止到上周的商品总数 $lastWeekProductCount = Db::name('store_product')->alias('p')->field('count(p.product_id) as think_count') ->join('merchant m', 'm.mer_id = p.mer_id') ->whereTime('p.create_time', '<=', $onWeekAgo) ->where(function ($query){ if ($this->streetCode != '') { $query->where('m.street_id', $this->streetCode); } else { $query->where('m.area_id', $this->streetCode); } }) ->count(); // Db::name('store_product')->whereTime('create_time', '<=', $onWeekAgo)->count(); // 本周商品总数 $thisWeekProductCount = Db::name('store_product')->alias('p')->field('count(p.product_id) as think_count') ->join('merchant m', 'm.mer_id = p.mer_id') ->whereTime('p.create_time', '<=', time()) ->where(function ($query){ if ($this->streetCode != '') { $query->where('m.street_id', $this->streetCode); } else { $query->where('m.area_id', $this->streetCode); } }) ->count(); // Db::name('store_product')->whereTime('create_time', '<=', time())->count(); // 计算商品总数周环比增长率 $weeklyProductTotalGrowthRate = $this->getRate($lastWeekProductCount, $thisWeekProductCount,4); return compact('todayProductCount', 'yestertodayProductCount', 'weeklyProductTotalGrowthRate'); } private function countNewProduct() { // 今日新商品数 $todayNewProductCount = Db::name('store_product')->alias('p')->field('count(p.product_id) as think_count') ->join('merchant m', 'm.mer_id = p.mer_id') ->whereDay('p.create_time', 'today') ->where(function ($query){ if ($this->streetCode != '') { $query->where('m.street_id', $this->streetCode); } else { $query->where('m.area_id', $this->streetCode); } }) ->count(); // Db::name('store_product')->whereDay('create_time', 'today')->count(); // 昨日新商品数 $yestertodayNewProductCount = Db::name('store_product')->alias('p')->field('count(p.product_id) as think_count') ->join('merchant m', 'm.mer_id = p.mer_id') ->whereDay('p.create_time', 'yesterday') ->where(function ($query){ if ($this->streetCode != '') { $query->where('m.street_id', $this->streetCode); } else { $query->where('m.area_id', $this->streetCode); } }) ->count(); // Db::name('store_product')->whereDay('create_time', 'yesterday')->count(); // 上周新商品数 $today = date('Y-m-d'); // 获取上一个自然周的开始,结束日期 $previous_week_start = strtotime(date('Y-m-d', strtotime('previous week', strtotime($today)))); $previous_week_end = strtotime('+7 days', strtotime(date('Y-m-d', strtotime('previous week', strtotime($today))))) - 1; // 查询上一个自然周 周期内新增商品数 $preWeekNewProductCount = Db::name('store_product')->alias('p')->field('count(p.product_id) as think_count') ->join('merchant m', 'm.mer_id = p.mer_id') ->whereTime('p.create_time', 'between', [$previous_week_start, $previous_week_end]) ->where(function ($query){ if ($this->streetCode != '') { $query->where('m.street_id', $this->streetCode); } else { $query->where('m.area_id', $this->streetCode); } }) ->count(); // Db::name('store_product') // ->whereTime('create_time', 'between', [$previous_week_start, $previous_week_end]) // ->count(); // 本周新商品数 // 获取本自然周的起始日期 $current_week_start = strtotime(date('Y-m-d', strtotime('this week', strtotime($today)))); $current_week_end = time(); // 查询本自然周 周期内新增商品数 $currWeekNewProductCount = Db::name('store_product')->alias('p')->field('count(p.product_id) as think_count') ->join('merchant m', 'm.mer_id = p.mer_id') ->whereTime('p.create_time', 'between', [$current_week_start, $current_week_end]) ->where(function ($query){ if ($this->streetCode != '') { $query->where('m.street_id', $this->streetCode); } else { $query->where('m.area_id', $this->streetCode); } }) ->count(); // Db::name('store_product') // ->whereTime('create_time', 'between', [$current_week_start, $current_week_end]) // ->count(); // 计算新增商品数的周环比增长率 $weeklyNewProductTotalGrowthRate = $this->getRate($preWeekNewProductCount, $currWeekNewProductCount, 4); return compact('todayNewProductCount', 'yestertodayNewProductCount', 'weeklyNewProductTotalGrowthRate'); } private function countMerchant() { // 今日累计店铺总数 $todayMerchantCount = Db::name('merchant') ->where(function ($query){ if ($this->streetCode != '') { $query->where('street_id', $this->streetCode); } else { $query->where('area_id', $this->streetCode); } }) ->whereTime('create_time', '<=', time()) ->count(); // 昨日累计店铺总数 $yestertodayMerchantCount = Db::name('merchant') ->where(function ($query){ if ($this->streetCode != '') { $query->where('street_id', $this->streetCode); } else { $query->where('area_id', $this->streetCode); } }) ->whereTime('create_time', '<=', strtotime(date('Y-m-d', time()))-1) ->count(); // 上周累计店铺总数 $onWeekAgo = strtotime('-7 days'); $lastWeekMerchantCount = Db::name('merchant') ->where(function ($query){ if ($this->streetCode != '') { $query->where('street_id', $this->streetCode); } else { $query->where('area_id', $this->streetCode); } }) ->whereTime('create_time', '<=', $onWeekAgo) ->count(); // 本周店铺累计总数 $thisWeekMerchantCount = Db::name('merchant') ->where('area_id', $this->areaCode) ->whereTime('create_time', '<=', time()) ->count(); // 计算商品总数周环比增长率 $weeklyMerchantGrowthRate = $this->getRate($lastWeekMerchantCount, $thisWeekMerchantCount, 4); return compact('todayMerchantCount', 'yestertodayMerchantCount', 'weeklyMerchantGrowthRate'); } // 实时浏览量 public function viewCount() { $res = Cache::store('file')->remember(self::class . '@viewCount', function () { $today = $this->mainGroup('today'); $yesterday = $this->mainGroup('yesterday'); $lastWeek = $this->mainGroup(date('Y-m-d', strtotime('- 7day'))); $lastWeekRate = $this->getRate($lastWeek, $today, 4); return compact('today', 'yesterday', 'lastWeekRate'); }, 2000 + random_int(600, 1200)); return app('json')->success($res); } protected function mainGroup($date) { $userVisitRepository = app()->make(UserVisitRepository::class); $visitNum = (float)$userVisitRepository->dateVisitNum($date); return $visitNum; } /** * @param $last * @param $today * @param int $scale * @return int|string|null * @author xaboy * @day 2020/6/25 */ protected function getRate($last, $today, $scale = 2) { if ($last == $today) return 0; else if ($last == 0) return $today; else if ($today == 0) return -$last; else return (float)bcdiv(bcsub($today, $last, $scale), $last, $scale); } // 商品分类列表 public function productCategoryList() { return app('json')->success($this->repository->getFormatList($this->request->merId())); } // 商品列表统计标题 public function getStatusFilter(ProductRepository $repository) { return app('json')->success($repository->getFilter(null,'商品',0)); } // 商品列表 public function productList(ProductRepository $repository) { [$page, $limit] = $this->getPage(); $where = $this->request->params([['type', 1]]); $where['is_gift_bag'] = 0; $_where = $repository->switchType($where['type'], null,0); // unset($_where['product_type']); unset($_where['star']); $where = array_merge($where, $_where); return app('json')->success($repository->getAdminList(null, $where, $page, $limit)); } }