add 数据之眼-成交用户统计
This commit is contained in:
parent
16c9511211
commit
79cbe988fe
@ -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');
|
||||
}
|
||||
}
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user