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();
$this->height = 160;
$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()
{
$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->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[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
*/
public function withContent($d1, $d2, $d3)
public function withContent($d1, $d2, $d3,$d4)
{
return $this->content(
<<<HTML
@ -124,12 +125,21 @@ JS;
<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">3km以上</span>
<span class="text-bold-600 ml-50">3-5km</span>
</div>
<div class="product-result">
<span>{$d3}</span>
</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>
HTML
);

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

@ -1,4 +1,5 @@
<?php
namespace App\Admin\Actions\Metrics;
use Dcat\Admin\Admin;
@ -6,13 +7,14 @@ use Dcat\Admin\Widgets\Metrics\Donut;
class Shipping extends Donut
{
protected $labels = ['站内配送','用户自提'];
protected $labels = ['站内配送', '用户自提', '配送占比', '自提占比'];
protected $shipping;
public function __construct($shipping)
{
$this->shipping = $shipping;
parent::__construct($title=null, $icon=null);
parent::__construct($title = null, $icon = null);
}
public function init()
@ -45,9 +47,14 @@ class Shipping extends Donut
*/
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->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
*/
protected function withContent($s1, $s2)
protected function withContent($s1, $s2, $s3, $s4)
{
$blue = Admin::color()->alpha('blue2', 0.5);
@ -93,6 +100,19 @@ class Shipping extends Donut
</div>
<div>{$s2}</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
);
}

16
app/Admin/Common/Order.php

@ -6,6 +6,7 @@ namespace App\Admin\Common;
use App\Models\ImsCjdcOrderMain;
use App\Models\LanzuUserRelationBind;
use Illuminate\Support\Facades\DB;
class Order
{
@ -67,10 +68,19 @@ class Order
$build1 = clone $buildData;
$build2 = clone $buildData;
$build3 = clone $buildData;
$build4 = clone $buildData;
$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;
}

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

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

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

@ -65,7 +65,7 @@ class OrderBar extends Chart
// 执行你的数据查询逻辑
$data = [
[
'name'=>'订单金额',
'name'=>$orderType=='num'?'订单数':'订单金额',
'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">
@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}}
</label>
@endforeach

Loading…
Cancel
Save