diff --git a/app/controller/api/dataview/User.php b/app/controller/api/dataview/User.php index 363603bf..f810df67 100644 --- a/app/controller/api/dataview/User.php +++ b/app/controller/api/dataview/User.php @@ -2,7 +2,10 @@ namespace app\controller\api\dataview; +use app\common\model\store\order\StoreOrder; +use app\common\model\user\UserVisit; use app\common\repositories\BaseRepository; +use app\common\repositories\store\order\StoreOrderRepository; use app\common\repositories\user\UserRepository; use app\common\repositories\user\UserVisitRepository; use crmeb\basic\BaseController; @@ -96,4 +99,98 @@ class User extends BaseController return compact('newUserCount', 'viewUserCount', 'totalUserCount'); } + + public function userTradeCount(StoreOrderRepository $orderRepository, UserVisitRepository $userVisitRepository) + { + + $monthDateRow = []; + // 获取当前月份的第一天 + $firstDay = date('Y-m-01', time()); + $i = 0; + $lastDay = date('Y-m-d', strtotime("$firstDay +1 month -1 day")); + while (date('Y-m-d', strtotime("$firstDay +$i days")) <= $lastDay) { + $monthDateRow[] = date('Y-m-d', strtotime("$firstDay +$i days")); + $i++; + } + + $this->merId = null; + $userTradeCountList = Cache::store('file')->remember(self::class . '@userTradeCount' . $this->streetCode, function () use ($orderRepository, $userVisitRepository, $monthDateRow) { + $list = []; + foreach ($monthDateRow as $date) { + $visitUser = $this->dateVisitUserNum($date); + $orderUser = $this->orderUserNum($date, null); +// $orderPrice = $this->orderPrice($date, null); + $payOrderUser = $this->orderUserNum($date, 1); + $payOrderPrice = $this->orderPrice($date, 1); +// $userRate = $payOrderUser ? bcdiv($payOrderPrice, $payOrderUser, 2) : 0; +// $orderRate = $visitUser ? bcdiv($orderUser, $visitUser, 2) : 0; +// $payOrderRate = $orderUser ? bcdiv($payOrderUser, $orderUser, 2) : 0; + $list[] = compact('date','visitUser', 'orderUser', 'payOrderUser'); + } + return $list; + }, 2000 + random_int(600, 1200)); + + // 县 + $area = Db::name('geo_area')->field('area_code, area_name')->where('area_code', $this->areaCode)->find(); + // 镇/街道 + $streetList = Db::name('geo_street')->field('street_code, street_name')->where('area_code', $this->areaCode)->select(); + return app('json')->success(compact('userTradeCountList', 'area', 'streetList')); + } + + protected function dateVisitUserNum($date) + { + return UserVisit::getDB()->alias('A')->join('StoreProduct B', 'A.type_id = B.product_id')->join('merchant m', 'B.mer_id=m.mer_id')->when($date, function ($query, $date) { + getModelTime($query, $date, 'A.create_time'); + })->where( function ($query) { + if ($this->streetCode != '') { + $query->where('m.street_id', $this->streetCode); + } else { + $query->where('m.area_id', $this->areaCode); + } + })->where('A.type', 'product')->group(' A.uid')->count(); + } + + public function orderUserNum($date, $paid = null) + { + return StoreOrder::getDB()->alias('o')->join('merchant m', 'o.mer_id=m.mer_id')->when($paid, function ($query, $paid) { + $query->where('paid', $paid); + })->where( function ($query) { + if ($this->streetCode != '') { + $query->where('m.street_id', $this->streetCode); + } else { + $query->where('m.area_id', $this->areaCode); + } + })->when($date, function ($query, $date) use ($paid) { + if (!$paid) { + getModelTime($query, $date, 'o.create_time'); + } else + getModelTime($query, $date, 'pay_time'); + })->group('o.uid')->count(); + } + + public function orderPrice($date, $paid = null) + { + return StoreOrder::getDB()->alias('o')->join('merchant m', 'o.mer_id=m.mer_id')->when($paid, function ($query, $paid) { + $query->where('o.paid', $paid); + })->where( function ($query) { + if ($this->streetCode != '') { + $query->where('m.street_id', $this->streetCode); + } else { + $query->where('m.area_id', $this->areaCode); + } + })->when($date, function ($query, $date) use ($paid) { + if (!$paid) { + $query->where(function ($query) use ($date) { + $query->where(function ($query) use ($date) { + $query->where('o.paid', 1); + getModelTime($query, $date, 'pay_time'); + })->whereOr(function ($query) use ($date) { + $query->where('o.paid', 0); + getModelTime($query, $date, 'o.create_time'); + }); + }); + } else + getModelTime($query, $date, 'pay_time'); + })->sum('o.pay_price'); + } } \ No newline at end of file diff --git a/route/api.php b/route/api.php index d406854c..8964e535 100644 --- a/route/api.php +++ b/route/api.php @@ -737,6 +737,7 @@ Route::group('api/', function () { Route::get('curr_day_order_amount', 'Order/currDayOrderAmount'); Route::get('product_count', 'Product/productCount'); Route::get('view_count', 'Product/viewCount'); + Route::get('user_trade_count', 'User/userTradeCount'); /**---------------------数据之眼可视化大屏api-------------------- end */