diff --git a/app/Admin/Controllers/StoreUserReportController.php b/app/Admin/Controllers/StoreUserReportController.php index af19c38..4897028 100644 --- a/app/Admin/Controllers/StoreUserReportController.php +++ b/app/Admin/Controllers/StoreUserReportController.php @@ -3,14 +3,10 @@ namespace App\Admin\Controllers; use App\Admin\Repositories\StoreUserReport; -use App\Models\ImsCjdcOrderMain; -use App\Models\storeUserReport as ModelsStoreUserReport; use Dcat\Admin\Form; use Dcat\Admin\Grid; use Dcat\Admin\Show; use Dcat\Admin\Controllers\AdminController; -use App\Models\ImsCjdcOrder; -use Illuminate\Support\Facades\DB; class StoreUserReportController extends AdminController { @@ -21,20 +17,7 @@ class StoreUserReportController extends AdminController */ 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->store_id; @@ -45,7 +28,9 @@ class StoreUserReportController extends AdminController $grid->filter(function (Grid\Filter $filter) { $filter->equal('store_id'); - + $filter->equal('market_id'); + // $filter->equal('column')->datetime($options)->toTimestamp(); + $filter->equal('pay_time')->month(); }); }); } diff --git a/app/Admin/Repositories/StoreUserReport.php b/app/Admin/Repositories/StoreUserReport.php index a5ca2fb..6e1fa8c 100644 --- a/app/Admin/Repositories/StoreUserReport.php +++ b/app/Admin/Repositories/StoreUserReport.php @@ -5,6 +5,7 @@ namespace App\Admin\Repositories; use App\Models\storeUserReport as Model; use Dcat\Admin\Grid\Model as GridModel; use Dcat\Admin\Repositories\EloquentRepository; +use App\Models\ImsCjdcOrder as orderModel; use Illuminate\Support\Facades\DB; class StoreUserReport extends EloquentRepository @@ -21,29 +22,44 @@ class StoreUserReport extends EloquentRepository */ 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; } } diff --git a/app/Models/ImsCjdcOrder.php b/app/Models/ImsCjdcOrder.php index f0e1f95..bc1a2ec 100644 --- a/app/Models/ImsCjdcOrder.php +++ b/app/Models/ImsCjdcOrder.php @@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Model; class ImsCjdcOrder extends Model { use HasDateTimeFormatter; - protected $table = 'ims_cjdc_order'; + protected $table = 'ims_cjdc_order as order'; public $timestamps = false; public function user()