Browse Source

数据报表

master
lanzu_qinsheng 5 years ago
parent
commit
02df227bbf
  1. 20
      app/Admin/Actions/Metrics/Distance.php
  2. 28
      app/Admin/Actions/Metrics/Shipping.php
  3. 16
      app/Admin/Common/Order.php
  4. 20
      app/Admin/Controllers/v3/DataReport.php
  5. 2
      app/Admin/Extensions/Chart/Bar/OrderBar.php
  6. 2
      resources/views/admin/tools/data_report_time.blade.php

20
app/Admin/Actions/Metrics/Distance.php

@ -26,7 +26,7 @@ class Distance extends Round
parent::init(); parent::init();
$this->height = 160; $this->height = 160;
$this->style('padding-top:0'); $this->style('padding-top:0');
$this->chartLabels(['1km以内', '1-3km', '3km以上']);
$this->chartLabels(['1km以内', '1-3km', '3-5km','5km以上']);
} }
@ -57,16 +57,17 @@ JS;
*/ */
public function fill() public function fill()
{ {
$this->withContent($this->distance[0], $this->distance[1],$this->distance[2]);
$this->withContent($this->distance[0], $this->distance[1],$this->distance[2],$this->distance[3]);
// 图表数据 // 图表数据
$this->withChart([ $this->withChart([
$this->distance[0]>0?sprintf("%.2f",($this->distance[0]/$this->number)*100):0, $this->distance[0]>0?sprintf("%.2f",($this->distance[0]/$this->number)*100):0,
$this->distance[0]>0?sprintf("%.2f",($this->distance[1]/$this->number)*100):0, $this->distance[0]>0?sprintf("%.2f",($this->distance[1]/$this->number)*100):0,
$this->distance[0]>0?sprintf("%.2f",($this->distance[2]/$this->number)*100):0, $this->distance[0]>0?sprintf("%.2f",($this->distance[2]/$this->number)*100):0,
$this->distance[0]>0?sprintf("%.2f",($this->distance[3]/$this->number)*100):0,
]); ]);
// 总数 // 总数
$this->chartTotal('数', $this->number);
$this->chartTotal('订单数', $this->number);
} }
@ -96,7 +97,7 @@ JS;
* *
* @return $this * @return $this
*/ */
public function withContent($d1, $d2, $d3)
public function withContent($d1, $d2, $d3,$d4)
{ {
return $this->content( return $this->content(
<<<HTML <<<HTML
@ -124,12 +125,21 @@ JS;
<div class="chart-info d-flex justify-content-between mb-1"> <div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center"> <div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-danger"></i> <i class="fa fa-circle-o text-bold-700 text-danger"></i>
<span class="text-bold-600 ml-50">3km以上</span>
<span class="text-bold-600 ml-50">3-5km</span>
</div> </div>
<div class="product-result"> <div class="product-result">
<span>{$d3}</span> <span>{$d3}</span>
</div> </div>
</div> </div>
<div class="chart-info d-flex justify-content-between mb-1">
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-danger"></i>
<span class="text-bold-600 ml-50">5km以上</span>
</div>
<div class="product-result">
<span>{$d4}</span>
</div>
</div>
</div> </div>
HTML HTML
); );

28
app/Admin/Actions/Metrics/Shipping.php

@ -1,4 +1,5 @@
<?php <?php
namespace App\Admin\Actions\Metrics; namespace App\Admin\Actions\Metrics;
use Dcat\Admin\Admin; use Dcat\Admin\Admin;
@ -6,13 +7,14 @@ use Dcat\Admin\Widgets\Metrics\Donut;
class Shipping extends Donut class Shipping extends Donut
{ {
protected $labels = ['站内配送','用户自提'];
protected $labels = ['站内配送', '用户自提', '配送占比', '自提占比'];
protected $shipping; protected $shipping;
public function __construct($shipping) public function __construct($shipping)
{ {
$this->shipping = $shipping; $this->shipping = $shipping;
parent::__construct($title=null, $icon=null);
parent::__construct($title = null, $icon = null);
} }
public function init() public function init()
@ -45,9 +47,14 @@ class Shipping extends Donut
*/ */
public function fill() public function fill()
{ {
$total = array_sum($this->shipping);
$s3 = $this->shipping[0]>0?sprintf("%.1f", ($this->shipping[0] / $total) * 100) . '%':'0%';
$s4 = $this->shipping[0]>0?sprintf("%.1f", ($this->shipping[1] / $total) * 100) . '%':'0%';
// 图表数据 // 图表数据
$this->withChart($this->shipping); $this->withChart($this->shipping);
$this->withContent($this->shipping[0], $this->shipping[1]);
$this->withContent($this->shipping[0], $this->shipping[1], $s3, $s4);
} }
/** /**
@ -72,7 +79,7 @@ class Shipping extends Donut
* *
* @return $this * @return $this
*/ */
protected function withContent($s1, $s2)
protected function withContent($s1, $s2, $s3, $s4)
{ {
$blue = Admin::color()->alpha('blue2', 0.5); $blue = Admin::color()->alpha('blue2', 0.5);
@ -93,6 +100,19 @@ class Shipping extends Donut
</div> </div>
<div>{$s2}</div> <div>{$s2}</div>
</div> </div>
<div class="d-flex pl-1 pr-1 pt-1" style="{$style}">
<div style="width: {$labelWidth}px">
<i class="fa fa-circle text-primary"></i> {$this->labels[2]}
</div>
<div>{$s3}</div>
</div>
<div class="d-flex pl-1 pr-1" style="{$style}">
<div style="width: {$labelWidth}px">
<i class="fa fa-circle" style="color: $blue"></i> {$this->labels[3]}
</div>
<div>{$s4}</div>
</div>
HTML HTML
); );
} }

16
app/Admin/Common/Order.php

@ -6,6 +6,7 @@ namespace App\Admin\Common;
use App\Models\ImsCjdcOrderMain; use App\Models\ImsCjdcOrderMain;
use App\Models\LanzuUserRelationBind; use App\Models\LanzuUserRelationBind;
use Illuminate\Support\Facades\DB;
class Order class Order
{ {
@ -67,10 +68,19 @@ class Order
$build1 = clone $buildData; $build1 = clone $buildData;
$build2 = clone $buildData; $build2 = clone $buildData;
$build3 = clone $buildData; $build3 = clone $buildData;
$build4 = clone $buildData;
$d1 = $build1->where('delivery_distance','<',1000)->count(); $d1 = $build1->where('delivery_distance','<',1000)->count();
$d2 = $build2->where('delivery_distance','>',[1000,3000])->count();
$d3 = $build3->where('delivery_distance','>',3000)->count();
$result = [$d1,$d2,$d3];
$d2 = $build2->whereBetween('delivery_distance',[1000,3000])->count();
$d3 = $build3->whereBetween('delivery_distance',[3000,5000])->count();
$d4 = $build4->where('delivery_distance','>',5000)->count();
$result = [$d1,$d2,$d3,$d4];
}elseif ($params['data_type']=='order_count_user'){
$result = DB::table('lanzu_order_main')
->whereIn('state', [3, 4, 5, 10,11])
->where('type',1)
->groupBy('user_id')->pluck('user_id')
->toArray();
$result = count($result);
} }
return $result; return $result;
} }

20
app/Admin/Controllers/v3/DataReport.php

@ -3,24 +3,19 @@
namespace App\Admin\Controllers\v3; namespace App\Admin\Controllers\v3;
use App\Admin\Actions\Metrics\Distance; use App\Admin\Actions\Metrics\Distance;
use App\Admin\Actions\Metrics\Shipping; use App\Admin\Actions\Metrics\Shipping;
use App\Admin\Actions\Tools\DataReportDate; use App\Admin\Actions\Tools\DataReportDate;
use App\Admin\Actions\Tools\DataReportOption; use App\Admin\Actions\Tools\DataReportOption;
use App\Admin\Common\Order; use App\Admin\Common\Order;
use App\Admin\Extensions\Chart\Bar\OrderBar; use App\Admin\Extensions\Chart\Bar\OrderBar;
use App\Admin\Extensions\Chart\PolarArea\Market;
use App\Models\ImsCjdcMarket; use App\Models\ImsCjdcMarket;
use App\Models\LanzuStore;
use App\Models\v3\User; use App\Models\v3\User;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Layout\Column; use Dcat\Admin\Layout\Column;
use Dcat\Admin\Layout\Content; use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row; use Dcat\Admin\Layout\Row;
use Dcat\Admin\Widgets\Card; use Dcat\Admin\Widgets\Card;
use http\Message\Body;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
class DataReport class DataReport
@ -35,6 +30,7 @@ class DataReport
protected $_count_user; protected $_count_user;
protected $_shipping; protected $_shipping;
protected $_distance; protected $_distance;
protected $_order_count_user;
public function __construct() public function __construct()
{ {
$option = request()->get('option',1); $option = request()->get('option',1);
@ -74,6 +70,13 @@ class DataReport
'condition'=>1,//取数据维度 condition 'condition'=>1,//取数据维度 condition
'user_ids'=>null 'user_ids'=>null
],$option); ],$option);
$this->_order_count_user = Order::getOrderData([
'user_type'=>'market_service',//谁取数据 user_type 用户类型
'data_type'=>'order_count_user',//取什么数据 data_type 数据类型
'market_id'=>$marketId,//取哪个市场数据
'condition'=>1,//取数据维度 condition
'user_ids'=>null
],$option);
} }
public function index(Content $content) public function index(Content $content)
@ -146,7 +149,7 @@ class DataReport
}); });
$row->column(2,function (Column $column){ $row->column(2,function (Column $column){
$title = "下过单的用户数"; $title = "下过单的用户数";
$value = 0;
$value = $this->_order_count_user;
$card = Card::make("<span style='color: #ffffff'>{$title}</span>","<span style='color: #ffffff'>{$value}</span>"); $card = Card::make("<span style='color: #ffffff'>{$title}</span>","<span style='color: #ffffff'>{$value}</span>");
$card->style('background-color:#4e9876'); $card->style('background-color:#4e9876');
$column->row($card); $column->row($card);
@ -172,7 +175,7 @@ class DataReport
$row->column(4,function (Column $column){ $row->column(4,function (Column $column){
$column->row(new Shipping($this->_shipping)); $column->row(new Shipping($this->_shipping));
$column->row(new Distance($this->_distance,$this->_number)); $column->row(new Distance($this->_distance,$this->_number));
$card3 = Card::make('222');
$card3 = Card::make('送达时间(暂无)');
$card3->style("height:155px"); $card3->style("height:155px");
$column->row($card3); $column->row($card3);
}); });
@ -193,6 +196,7 @@ class DataReport
$data = DB::table('lanzu_order_main') $data = DB::table('lanzu_order_main')
->select('money') ->select('money')
->selectRaw("FROM_UNIXTIME(created_at,'%Y-%m-%d') as add_time") ->selectRaw("FROM_UNIXTIME(created_at,'%Y-%m-%d') as add_time")
->whereIn('state', [3, 4, 5, 10,11])
->where($where) ->where($where)
->whereBetween('created_at',$params['date_time']) ->whereBetween('created_at',$params['date_time'])
->get(); ->get();

2
app/Admin/Extensions/Chart/Bar/OrderBar.php

@ -65,7 +65,7 @@ class OrderBar extends Chart
// 执行你的数据查询逻辑 // 执行你的数据查询逻辑
$data = [ $data = [
[ [
'name'=>'订单金额',
'name'=>$orderType=='num'?'订单数':'订单金额',
'data' =>$orderType=='num'? $this->_data['num']:$this->_data['amount'] 'data' =>$orderType=='num'? $this->_data['num']:$this->_data['amount']
], ],
]; ];

2
resources/views/admin/tools/data_report_time.blade.php

@ -1,6 +1,6 @@
<div class="btn-group btn-group-toggle" data-toggle="buttons"> <div class="btn-group btn-group-toggle" data-toggle="buttons">
@foreach($options as $option => $label) @foreach($options as $option => $label)
<label class="btn btn-outline-primary {{request()->get('type','today')==$option? 'active':''}}">
<label class="btn btn-outline-primary {{request()->get('type','yesterday')==$option? 'active':''}}">
<input type="radio" name="options" id="{{$option}}"> {{$label}} <input type="radio" name="options" id="{{$option}}"> {{$label}}
</label> </label>
@endforeach @endforeach

Loading…
Cancel
Save