Browse Source

店铺新用户报表--修改数据源查询

master
liangyuyan 5 years ago
parent
commit
8063614cf0
  1. 23
      app/Admin/Controllers/StoreUserReportController.php
  2. 62
      app/Admin/Repositories/StoreUserReport.php
  3. 2
      app/Models/ImsCjdcOrder.php

23
app/Admin/Controllers/StoreUserReportController.php

@ -3,14 +3,10 @@
namespace App\Admin\Controllers; namespace App\Admin\Controllers;
use App\Admin\Repositories\StoreUserReport; use App\Admin\Repositories\StoreUserReport;
use App\Models\ImsCjdcOrderMain;
use App\Models\storeUserReport as ModelsStoreUserReport;
use Dcat\Admin\Form; use Dcat\Admin\Form;
use Dcat\Admin\Grid; use Dcat\Admin\Grid;
use Dcat\Admin\Show; use Dcat\Admin\Show;
use Dcat\Admin\Controllers\AdminController; use Dcat\Admin\Controllers\AdminController;
use App\Models\ImsCjdcOrder;
use Illuminate\Support\Facades\DB;
class StoreUserReportController extends AdminController class StoreUserReportController extends AdminController
{ {
@ -21,20 +17,7 @@ class StoreUserReportController extends AdminController
*/ */
protected function grid() protected function grid()
{ {
$startTime = '2020-06-01';$endTime = '2020-07-01';
$orderModel = new ImsCjdcOrder();
$newModel = $orderModel->with([
'store:id,market_id,name,mm_user_id',
'user'=> function($query) use($startTime,$endTime){
$query->selectRaw(DB::raw('count(distinct user_id) as new_user_total'))->whereRaw("join_time BETWEEN UNIX_TIMESTAMP('?') AND UNIX_TIMESTAMP('?')",[$startTime,$endTime]);
}])
->whereRaw("UNIX_TIMESTAMP(pay_time) BETWEEN UNIX_TIMESTAMP('?') AND UNIX_TIMESTAMP('?')",[$startTime,$endTime])
->select('store_id')
->groupBy('store_id')
->orderBy('market_id','desc')
->orderbY('new_user_total','desc');
// return Grid::make(new StoreUserReport(), function (Grid $grid) {
return Grid::make($newModel, function (Grid $grid) {
return Grid::make(new StoreUserReport(), function (Grid $grid) {
$grid->disableCreateButton(); $grid->disableCreateButton();
$grid->store_id; $grid->store_id;
@ -45,7 +28,9 @@ class StoreUserReportController extends AdminController
$grid->filter(function (Grid\Filter $filter) { $grid->filter(function (Grid\Filter $filter) {
$filter->equal('store_id'); $filter->equal('store_id');
$filter->equal('market_id');
// $filter->equal('column')->datetime($options)->toTimestamp();
$filter->equal('pay_time')->month();
}); });
}); });
} }

62
app/Admin/Repositories/StoreUserReport.php

@ -5,6 +5,7 @@ namespace App\Admin\Repositories;
use App\Models\storeUserReport as Model; use App\Models\storeUserReport as Model;
use Dcat\Admin\Grid\Model as GridModel; use Dcat\Admin\Grid\Model as GridModel;
use Dcat\Admin\Repositories\EloquentRepository; use Dcat\Admin\Repositories\EloquentRepository;
use App\Models\ImsCjdcOrder as orderModel;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
class StoreUserReport extends EloquentRepository class StoreUserReport extends EloquentRepository
@ -21,29 +22,44 @@ class StoreUserReport extends EloquentRepository
*/ */
public function get(GridModel $model) public function get(GridModel $model)
{ {
$where = ['2020-06-01','2020-07-01'];
$startTime = '2020-06-01';$endTime = '2020-08-01';
$this->setSort($model);
$this->setPaginate($model);
$list = DB::select(" SELECT
store.id
,store.market_id
,store.`name`
,store.mm_user_id
,count(distinct orders.user_id) new_user_total
FROM
ims_cjdc_order orders
INNER JOIN ims_cjdc_store store ON orders.store_id = store.id
INNER JOIN ims_cjdc_user users ON orders.user_id = users.id
WHERE
users.join_time BETWEEN UNIX_TIMESTAMP(?) AND UNIX_TIMESTAMP(?)
AND UNIX_TIMESTAMP(orders.pay_time) BETWEEN UNIX_TIMESTAMP(?) AND UNIX_TIMESTAMP(?)
GROUP BY store.id
ORDER BY store.id ASC ",
array_merge($where,$where)
);
$total = count($list);
return $model->makePaginator(
$total,
$list
);
$orderModel = new orderModel();
//根据订单查询
// $query = $orderModel::join('ims_cjdc_store as store','order.store_id','store.id')
// ->join('ims_cjdc_user as user','order.user_id','user.id')
// ->select('store_id','store.market_id','store.name as store_name','mm_user_id',DB::raw("count(distinct order.user_id) as new_user_total"))
// ->whereRaw("UNIX_TIMESTAMP(pay_time) BETWEEN UNIX_TIMESTAMP(?) AND UNIX_TIMESTAMP(?)",[$startTime,$endTime])
// ->whereRaw("join_time BETWEEN UNIX_TIMESTAMP(?) AND UNIX_TIMESTAMP(?)",[$startTime,$endTime])
// ->groupBy('store_id')
// ->orderBy('market_id','desc')
// ->orderBY('new_user_total','desc');
// 根据流水查询
$query = $orderModel::join('ims_cjdc_store as store','order.store_id','store.id')
->join('ims_cjdc_user as user','order.user_id','user.id')
->select('store_id','store.market_id','store.name as store_name','mm_user_id',DB::raw("count(distinct order.user_id) as new_user_total"))
->whereRaw("join_time BETWEEN UNIX_TIMESTAMP(?) AND UNIX_TIMESTAMP(?)",[$startTime,$endTime])
->groupBy('store_id')
->orderBy('market_id','desc')
->orderBY('new_user_total','desc');
$model->getQueries()->unique()->each(function ($value) use (&$query) {
if ($value['method'] == 'paginate') {
$value['arguments'][1] = $this->getGridColumns();
} elseif ($value['method'] == 'get') {
$value['arguments'] = [$this->getGridColumns()];
}
$query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []);
});
$query = $query->toArray();
$query = $model->makePaginator($query['total'],$query['data']);
return $query;
} }
} }

2
app/Models/ImsCjdcOrder.php

@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Model;
class ImsCjdcOrder extends Model class ImsCjdcOrder extends Model
{ {
use HasDateTimeFormatter; use HasDateTimeFormatter;
protected $table = 'ims_cjdc_order';
protected $table = 'ims_cjdc_order as order';
public $timestamps = false; public $timestamps = false;
public function user() public function user()

Loading…
Cancel
Save