Browse Source

Merge branch 'order_statistics'

master
liangyuyan 5 years ago
parent
commit
882720a3cc
  1. 83
      app/Admin/Controllers/v3/OrderReportController.php
  2. 110
      app/Admin/Extensions/OrderReportPage.php
  3. 122
      app/Admin/Repositories/v3/OrderReport.php
  4. 3
      app/Admin/routes.php
  5. 12
      app/Models/v3/StoreAccount.php
  6. 60
      resources/views/order_report.php

83
app/Admin/Controllers/v3/OrderReportController.php

@ -0,0 +1,83 @@
<?php
namespace App\Admin\Controllers\v3;
use App\Admin\Repositories\v3\OrderReport;
use Dcat\Admin\Grid;
use Dcat\Admin\Controllers\AdminController;
use Dcat\Admin\Layout\Content;
use App\Models\v3\Market as marketModel;
use App\Admin\Extensions\OrderReportPage;
use Dcat\Admin\Widgets\Lazy;
use Illuminate\Support\Collection;
class OrderReportController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new OrderReport(), function (Grid $grid) {
// $grid->column('user_total','现存用户总数');
// $grid->column('order_total_money','订单总额');
// $grid->column('new_user_total_money','平台新用户补贴总额');
// $grid->column('store_user_total_money','店铺用户每日首单补贴');
// $grid->column('new_add_user','新增用户数');
$grid->column('name','统计名称(默认统计当天数据)');
$grid->column('value','统计数量');
$grid->filter(function (Grid\Filter $filter) {
//市场
$marketList = MarketModel::getMarketArray();
$filter->equal('market_id','市场')->select($marketList);
$filter->equal('start_time','开始时间')->date();
$filter->equal('end_time','结束时间')->date();
});
// 每页1条
$grid->paginate(10);
$grid->disableCreateButton();
$grid->disableBatchActions();
$grid->disableBatchDelete();
$grid->toolsWithOutline();
$grid->disableDeleteButton();
$grid->disableEditButton();
$grid->disableQuickEditButton();
$grid->disableViewButton();
});
}
public function indexS(Content $content)
{
$grid = $this->grid();
return $content
->header('报表')
->description('合并表头功能示例')
->body(function ($row) use($grid){
$row->column(4, 123);
$row->column(4, 123);
$row->column(4, 123);
});
}
public function orderReport(Content $content)
{
$marketId = request()->input('market_id');
$startTime = request()->input('start_time');
$endTime = request()->input('end_time');
// 实例化表单类并传递自定义参数
$order = OrderReportPage::make(['market_id' => $marketId,'start_time'=>$startTime,'endTime'=>$endTime]);
return $content->header("统计")
->breadcrumb(['text' => '统计', 'url' => 'index'])
->body(Lazy::make($order));
}
}

110
app/Admin/Extensions/OrderReportPage.php

@ -0,0 +1,110 @@
<?php
namespace App\Admin\Extensions;
use App\Admin\Common\LinkUrl;
use Dcat\Admin\Admin;
use Dcat\Admin\Support\LazyRenderable;
use Illuminate\Support\Facades\DB;
use App\Models\ImsCjdcOrder as orderModel;
use App\Models\ImsCjdcOrderMain as orderMainModel;
use App\Models\v3\Market as MarketModel;
use App\Models\StoreAccount as StoreAccountModel;
use App\Models\v3\Store as StoreModel;
use App\Models\v3\User as UserModel;
class OrderReportPage extends LazyRenderable
{
protected static $js = [LinkUrl::VUE_JS, LinkUrl::ELEMENT_UI_JS];
protected static $css = [LinkUrl::DETAIL_CSS, LinkUrl::ELEMENT_UI_CSS];
public function render()
{
$marketId = request()->input('market_id');
$startTime = request()->input('start_time');
$endTime = request()->input('end_time');
$orderMain = orderMainModel::select(DB::raw('COUNT(id) AS total_num, SUM(money) AS total_money'))->whereIn('state',[4,5,10]);
$storeNewUser = StoreAccountModel::select(DB::raw("SUM( CASE WHEN note = '新用户下单成功,平台奖励' THEN 1 ELSE 0 END ) AS new_add_total, SUM( CASE WHEN note = '新用户下单成功,平台奖励' THEN money ELSE 0 END ) AS new_user_total,SUM( CASE WHEN note = '用户下单成功,平台奖励' THEN money ELSE 0 END ) AS store_total"));
$newUser = UserModel::select(DB::raw('count(id) AS total'));
if($marketId){
$orderMain->where('market_id',$marketId);
// 查询这个市场下的店铺id
$storeIds = StoreModel::where('market_id',$marketId)->pluck('id');
$storeNewUser->whereIn('store_id',$storeIds);
}
if($startTime){
$orderMain->where([['created_at','>=',strtotime($startTime)]]);
$storeNewUser->where([['time','>=',$startTime]]);
$newUser->where([['created_at','>=',strtotime($startTime)]]);
}
if($endTime){
$orderMain->where([['created_at','<=',strtotime($endTime)]]);
$storeNewUser->where([['time','<=',$endTime]]);
$newUser->where([['created_at','<=',strtotime($endTime)]]);
}
if(empty($startTime) && empty($endTime)){
$time = date('Y-m-d',time());
$todayStart = $time.'00:00:00';
$todayEnd = $time.'23:59:59';
$orderMain->where([['created_at','>=',strtotime($todayStart)]]);
$storeNewUser->where([['time','>=',$todayStart]]);
$newUser->where([['created_at','>=',strtotime($todayStart)]]);
$orderMain->where([['created_at','<=',strtotime($todayEnd)]]);
$storeNewUser->where([['time','<=',$todayEnd]]);
$newUser->where([['created_at','<=',strtotime($todayEnd)]]);
}
// 订单总额
$orderReport = $orderMain->get()->toArray();
// 总补贴金额
$storeNewUsers = $storeNewUser->get()->toArray();
// 总用户
$userTotal = $newUser->get()->toArray();
$query = [
'order_total_num' => !empty($orderReport[0]['total_num'])?$orderReport[0]['total_num']:0,
'order_total_money' => !empty($orderReport[0]['total_money'])?$orderReport[0]['total_money']:0,
'new_user_total_money' => !empty($storeNewUsers[0]['new_user_total'])?$storeNewUsers[0]['new_user_total']:0,
'store_user_total_money' => !empty($storeNewUsers[0]['store_total'])?$storeNewUsers[0]['store_total']:0,
'new_add_user' => !empty($storeNewUsers[0]['new_add_total'])?$storeNewUsers[0]['new_add_total']:0,
'user_total' => !empty($userTotal[0]['total'])?$userTotal[0]['total']:0,
];
if ($query) {
// $marketList = MarketModel::getMarket();
Admin::script(
<<<JS
var app = new Vue({
el:"#order_report",
data:{
order_total_num:"{$query['order_total_num']}",
order_total_money:"{$query['order_total_money']}",
new_user_total_money:"{$query['new_user_total_money']}",
store_user_total_money:"{$query['store_user_total_money']}",
new_add_user:"{$query['new_add_user']}",
user_total:"{$query['user_total']}",
},
methods: {
}
});
JS
);
}
return view('order_report');
}
}

122
app/Admin/Repositories/v3/OrderReport.php

@ -0,0 +1,122 @@
<?php
namespace App\Admin\Repositories\v3;
use App\Models\v3\Store as Model;
use Dcat\Admin\Grid\Model as GridModel;
use Dcat\Admin\Repositories\EloquentRepository;
use Illuminate\Support\Facades\DB;
use App\Models\ImsCjdcOrder as orderModel;
use App\Models\ImsCjdcOrderMain as orderMainModel;
use App\Models\v3\Market as MarketModel;
use App\Models\StoreAccount as StoreAccountModel;
use App\Models\v3\Store as StoreModel;
use App\Models\v3\User as UserModel;
class OrderReport extends EloquentRepository
{
/**
* Model.
*
* @var string
*/
protected $eloquentClass = Model::class;
/**
* 获取统计列表数据
* 订单 用户
* 订单总金额 现存用户总数
* 新用户补贴金额 新增用户总数
* 商户首单补贴金额
*/
public function get(GridModel $model)
{
$marketId = request()->input('market_id');
$startTime = request()->input('start_time');
$endTime = request()->input('end_time');
$orderMain = orderMainModel::select(DB::raw('COUNT(id) AS total_num, SUM(money) AS total_money'))->whereIn('state',[4,5,10]);
$storeNewUser = StoreAccountModel::select(DB::raw("SUM( CASE WHEN note = '新用户下单成功,平台奖励' THEN 1 ELSE 0 END ) AS new_add_total, SUM( CASE WHEN note = '新用户下单成功,平台奖励' THEN money ELSE 0 END ) AS new_user_total,SUM( CASE WHEN note = '用户下单成功,平台奖励' THEN money ELSE 0 END ) AS store_total"));
$newUser = UserModel::select(DB::raw('count(id) AS total'));
if($marketId){
$orderMain->where('market_id',$marketId);
// 查询这个市场下的店铺id
$storeIds = StoreModel::where('market_id',$marketId)->pluck('id');
$storeNewUser->whereIn('store_id',$storeIds);
}
if($startTime){
$startTime = $startTime.' 00:00:00';
$orderMain->where([['created_at','>=',strtotime($startTime)]]);
$storeNewUser->where([['time','>=',$startTime]]);
$newUser->where([['created_at','>=',strtotime($startTime)]]);
}
if($endTime){
$endTime = $endTime.' 23:59:59';
$orderMain->where([['created_at','<=',strtotime($endTime)]]);
$storeNewUser->where([['time','<=',$endTime]]);
$newUser->where([['created_at','<=',strtotime($endTime)]]);
}
if(empty($startTime) && empty($endTime)){
$time = date('Y-m-d',time());
$todayStart = $time.' 00:00:00';
$todayEnd = $time.' 23:59:59';
$orderMain->where([['created_at','>=',strtotime($todayStart)]]);
$storeNewUser->where([['time','>=',$todayStart]]);
$orderMain->where([['created_at','<=',strtotime($todayEnd)]]);
$storeNewUser->where([['time','<=',$todayEnd]]);
}
// 订单总额
$orderReport = $orderMain->get()->toArray();
// 总补贴金额
$storeNewUsers = $storeNewUser->get()->toArray();
// 总用户
$userTotal = $newUser->get()->toArray();
$query = [
'order_total_num' => !empty($orderReport[0]['total_num'])?$orderReport[0]['total_num']:0,
'order_total_money' => !empty($orderReport[0]['total_money'])?$orderReport[0]['total_money']:0,
'new_user_total_money' => !empty($storeNewUsers[0]['new_user_total'])?$storeNewUsers[0]['new_user_total']:0,
'store_user_total_money' => !empty($storeNewUsers[0]['store_total'])?$storeNewUsers[0]['store_total']:0,
'new_add_user' => !empty($storeNewUsers[0]['new_add_total'])?$storeNewUsers[0]['new_add_total']:0,
'user_total' => !empty($userTotal[0]['total'])?$userTotal[0]['total']:0,
];
$list = [
[
'key' => 'user_total',
'name' => '现存用户总数',
'value' => $query['user_total']
],
[
'key' => 'order_total_num',
'name' => '订单总额',
'value' => $query['order_total_num']
],
[
'key' => 'new_user_total_money',
'name' => '平台新用户补贴总额',
'value' => $query['new_user_total_money']
],
[
'key' => 'store_user_total_money',
'name' => '店铺用户每日首单补贴',
'value' => $query['store_user_total_money']
],
[
'key' => 'new_add_user',
'name' => '新增用户数',
'value' => $query['new_add_user']
]
];
return $model->makePaginator(
count($list),$list
);
}
}

3
app/Admin/routes.php

@ -81,5 +81,8 @@ Route::group([
//地区 //地区
$router->any('/api/area', 'LanzuArea@getArea'); $router->any('/api/area', 'LanzuArea@getArea');
// 订单统计
$router->resource('/order_report', 'v3\OrderReportController');
}); });

12
app/Models/v3/StoreAccount.php

@ -0,0 +1,12 @@
<?php
namespace App\Models\v3;
use Illuminate\Database\Eloquent\Model;
class StoreAccount extends Model
{
protected $table = 'ims_cjdc_store_account';
}

60
resources/views/order_report.php

@ -0,0 +1,60 @@
<div id="order_report">
<!-- 搜索 -->
<div>
<form action="" pjax-container="" method="get">
<div>
<select class="form-control" name="market_id" >
<option value="0">选择市场</option>
<option value="1">海尔青啤市场</option>
<option value="2">东沟岭市场</option>
<option value="3">铜鼓岭市场</option>
<option value="4">华园菜市</option>
<option value="5">平西市场</option>
</select>
</div>
<div>
<div style="margin-top: 20px;">
<div class="form-group">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text bg-white text-capitalize"><b>时间</b>&nbsp;<i class="feather icon-calendar"></i></span>
</div>
<input autocomplete="off" type="text" class="form-control" id="filter_column__time_start" placeholder="时间" name="start_time" value="" >
<span class="input-group-addon" style="border-left: 0; border-right: 0;">To</span>
<input autocomplete="off" type="text" class="form-control" id="filter_column__time_end" placeholder="时间" name="end_time" value="" >
</div>
</div>
</div>
<div>
<input type="submit" value="查询"/>
</div>
</form>
</div>
<!-- 搜索 end -->
<!-- 订单数据 -->
<div style="margin-top: 20px;">
<div>
<p>订单总额(元): {{order_total_money}}</p>
</div>
<div>
<p>平台新用户补贴总额(元): {{new_user_total_money}}</p>
</div>
<div>
<p>店铺用户每日首单补贴(元): {{store_user_total_money}}</p>
</div>
</div>
<!-- 订单数据 end -->
<!-- 用户数据 -->
<div>
<div>
<div>
<p>现存用户总数(位): {{user_total}}</p>
</div>
<div>
<p>新增用户数(位): {{new_add_user}}</p>
</div>
</div>
<!-- 用户数据 end -->
</div>
Loading…
Cancel
Save