Browse Source

活动商品--添加图表-end

master
liangyuyan 5 years ago
parent
commit
80e81e8afb
  1. 1
      app/Admin/Controllers/v3/GoodsActivityReportController.php
  2. 29
      app/Admin/Repositories/v3/GoodsActivityReport.php
  3. 49
      app/Admin/Widgets/Charts/OrderGoodsActivityCountChart.php
  4. 55
      app/Admin/Widgets/Charts/OrderGoodsActivityMarketChart.php
  5. 49
      app/Admin/Widgets/Charts/OrderGoodsActivityTotalChart.php

1
app/Admin/Controllers/v3/GoodsActivityReportController.php

@ -116,7 +116,6 @@ class GoodsActivityReportController extends AdminController
$row->column(4,new OrderGoodsActivityTotalChart());
$row->column(4,new OrderGoodsActivityCountChart());
$row->column(4,new OrderGoodsActivityMarketChart());
})
->body(function(Row $row){
$row->column(12,$this->grid());

29
app/Admin/Repositories/v3/GoodsActivityReport.php

@ -28,7 +28,7 @@ class GoodsActivityReport extends EloquentRepository
$perPage = $model->getPerPage();
$selects = 'SUM(number) as total,SUM((original_price-price)*number) as subsidy_total,price,original_price,lanzu_order_goods.goods_id,lanzu_order_goods.name,lanzu_order_goods.cover_img,lanzu_order_main.market_id,lanzu_order.store_id';
$orderGoodsActivity = $this->getDataModel($selects, $perPage);
$orderGoodsActivity = $this->getDataModel($selects);
$list = $orderGoodsActivity->orderBy('total','desc')->groupBy('goods_id','lanzu_order_goods.name','cover_img','market_id','store_id','price','original_price')->paginate($perPage);
$list = $list->toArray();
@ -38,15 +38,16 @@ class GoodsActivityReport extends EloquentRepository
}
public function getDataModel($selects ,$perPage = 10)
public function getDataModel($selects,$params = [])
{
// 获取筛选参数
$name = request()->input('name', '');
$marketId = request()->input('market_id');
$storeId = request()->input('store_id');
$time = date('Y-m-d',time());
$startTime = request()->input('start_time');
$endTime = request()->input('end_time');
// 获取筛选参数
$name = $params['name'] ?? request()->input('name', '');
$marketId = $params['market_id'] ?? request()->input('market_id',0);
$storeId = $params['store_id'] ?? request()->input('store_id',0);
$startTime = $params['start_time'] ?? request()->input('start_time','');
$endTime = $params['end_time'] ?? request()->input('end_time','');
$orderGoodsActivity = Model::select(DB::raw($selects))
->join('lanzu_order','lanzu_order_goods.order_id','=','lanzu_order.id')
@ -68,7 +69,7 @@ class GoodsActivityReport extends EloquentRepository
$date = $startTime;
$startTime = $startTime.' 00:00:00';
$orderGoodsActivity->where([['lanzu_order_goods.created_at','>=',strtotime($startTime)]]);
$orderGoodsActivity->where('lanzu_order_goods.created_at','>=',strtotime($startTime));
}else{
$date = '2020-06-01';
}
@ -76,7 +77,7 @@ class GoodsActivityReport extends EloquentRepository
$date = $date.' 至 '.$endTime;
$endTime = $endTime.' 23:59:59';
$orderGoodsActivity->where([['lanzu_order_goods.created_at','<=',strtotime($endTime)]]);
$orderGoodsActivity->where('lanzu_order_goods.created_at','<=',strtotime($endTime));
}else{
$date .= ' 至 '.$time;
}
@ -94,10 +95,10 @@ class GoodsActivityReport extends EloquentRepository
/**
* 获取总数
*/
public function getCountData()
public function getCountData($params = [])
{
$selects = "SUM(lanzu_order_goods.number) as total,SUM((original_price-price)*number) as subsidy_total,FROM_UNIXTIME(lanzu_order_goods.created_at,'%Y-%m-%d') as dtime";
$orderGoodsActivity = $this->getDataModel($selects);
$orderGoodsActivity = $this->getDataModel($selects,$params);
$total = $orderGoodsActivity->groupBy('dtime')->get()->toArray();
return $total ?? [];
@ -106,10 +107,10 @@ class GoodsActivityReport extends EloquentRepository
/**
* 分市场获取
*/
public function getMarketData()
public function getMarketData($params = [])
{
$selects = "SUM(lanzu_order_goods.number) as total,SUM((original_price-price)*number) as subsidy_total,market_id";
$orderGoodsActivity = $this->getDataModel($selects);
$orderGoodsActivity = $this->getDataModel($selects,$params);
$total = $orderGoodsActivity->groupBy('market_id')->get()->toArray();
return $total ?? [];

49
app/Admin/Widgets/Charts/OrderGoodsActivityCountChart.php

@ -16,8 +16,6 @@ class OrderGoodsActivityCountChart extends Line
protected $categories = [];
protected $data = [];
protected $total = [];
protected $id;
protected $option;
protected $valueData = [];
protected $GoodsActivityReport = null;
protected $showNumber = 7;
@ -25,25 +23,6 @@ class OrderGoodsActivityCountChart extends Line
public function __construct($data = [])
{
$this->GoodsActivityReport = new GoodsActivityReport();
$this->option = $this->id = 7;
// 分页的时候不重复查询数据
$currentPage = request()->input('page', 1);
if($currentPage == 1){
$data = $this->GoodsActivityReport->getCountData();
if(!empty($data) && is_array($data)){
$total = 0;
$subsidyTotal = 0;
foreach($data as $key => $value){
if($key < $this->showNumber){
$this->data[] = $value['subsidy_total'];
$this->categories[] = $value['dtime'];
}
$subsidyTotal += $value['subsidy_total'];
}
$this->total['subsidy_total'] = $subsidyTotal;
}
}
parent::__construct();
}
@ -54,7 +33,7 @@ class OrderGoodsActivityCountChart extends Line
$color = Admin::color();
// 设置标题
$this->title('总补贴金额(元)');
$this->subTitle(''.$this->showNumber.'天每天总补贴金额');
$this->subTitle('其中'.$this->showNumber.'天每天总补贴金额');
$this->chartHeight(140);
// 设置图表颜色
@ -92,6 +71,24 @@ class OrderGoodsActivityCountChart extends Line
public function handle(Request $request)
{
// 数据查询逻辑
// 分页的时候不重复查询数据
$currentPage = request()->input('page', 1);
if($currentPage == 1){
$params = $this->parameters();
$data = $this->GoodsActivityReport->getCountData($params);
if(!empty($data) && is_array($data)){
$subsidyTotal = 0;
foreach($data as $key => $value){
if($key < $this->showNumber){
$this->data[] = $value['subsidy_total'];
$this->categories[] = $value['dtime'];
}
$subsidyTotal += $value['subsidy_total'];
}
$this->total['subsidy_total'] = $subsidyTotal;
}
}
$data = $this->data;
$categories = $this->categories;
$chartData = [
@ -113,8 +110,12 @@ class OrderGoodsActivityCountChart extends Line
public function parameters(): array
{
return [
'id' => $this->id,
'option' => $this->option,
'page' => request()->input('page', 1),
'name' => request()->input('name', ''),
'market_id' => request()->input('market_id',0),
'store_id' => request()->input('store_id',0),
'start_time' => request()->input('start_time',''),
'end_time' => request()->input('end_time',''),
];
}
/**

55
app/Admin/Widgets/Charts/OrderGoodsActivityMarketChart.php

@ -15,33 +15,14 @@ class OrderGoodsActivityMarketChart extends Donut
protected $labels = [];
protected $data = [];
protected $total = [];
protected $id;
protected $option;
protected $GoodsActivityReport = null;
protected $color = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B', '#2b908f', '#f9a3a4', '#90ee7e', '#f48024', '#69d2e7'];
protected $colors = [];
protected $GoodsActivityReport = null;
protected $color = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B', '#2b908f', '#f9a3a4', '#90ee7e', '#f48024', '#69d2e7'];
public function __construct($data = [])
{
$this->GoodsActivityReport = new GoodsActivityReport();
$this->option = $this->id = 7;
// 分页的时候不重复查询数据
$currentPage = request()->input('page', 1);
if($currentPage == 1){
$data = $this->GoodsActivityReport->getMarketData();
$market = MarketModel::getMarketArray();
if(!empty($data) && is_array($data)){
$total = 0;
foreach($data as $key => $value){
$this->data[] = (int)$value['total'];
$this->labels[] = $market[$value['market_id']]??'未知';
$this->colors[] = $this->color[$key];
$total += $value['total'];
}
$this->total['number_total'] = $total;
}
}
parent::__construct();
}
@ -53,12 +34,11 @@ class OrderGoodsActivityMarketChart extends Donut
$this->title('各市场销售量(单)');
$this->subTitle('各市场销售量的占比图');
$this->chartHeight(170);
$this->chartMarginTop(20);
// 设置下拉菜单
// $this->dropdown([]);
$this->chartLabels($this->labels);
// 设置图表颜色
$this->chartColors($this->colors);
}
@ -71,6 +51,25 @@ class OrderGoodsActivityMarketChart extends Donut
*/
public function handle(Request $request)
{
// 分页的时候不重复查询数据
$currentPage = $request->get('page');
if($currentPage == 1){
$params = $this->parameters();
$data = $this->GoodsActivityReport->getMarketData($params);
$market = MarketModel::getMarketArray();
if(!empty($data) && is_array($data)){
$total = 0;
foreach($data as $key => $value){
$this->data[] = (int)$value['total'];
$this->labels[] = $market[$value['market_id']]??'未知';
$this->colors[] = $this->color[$key];
$total += $value['total'];
}
$this->total['number_total'] = $total;
}
}
$this->chartLabels($this->labels);
$this->chartColors($this->colors);
// 数据查询逻辑
$data = $this->data;
$this->withContent($data);
@ -85,8 +84,12 @@ class OrderGoodsActivityMarketChart extends Donut
public function parameters(): array
{
return [
'id' => $this->id,
'option' => $this->option,
'page' => request()->input('page', 1),
'name' => request()->input('name', ''),
'market_id' => request()->input('market_id',0),
'store_id' => request()->input('store_id',0),
'start_time' => request()->input('start_time',''),
'end_time' => request()->input('end_time',''),
];
}

49
app/Admin/Widgets/Charts/OrderGoodsActivityTotalChart.php

@ -16,8 +16,6 @@ class OrderGoodsActivityTotalChart extends Bar
protected $categories = [];
protected $data = [];
protected $total = [];
protected $id;
protected $option;
protected $valueData = [];
protected $GoodsActivityReport = null;
protected $showNumber = 7;
@ -25,25 +23,6 @@ class OrderGoodsActivityTotalChart extends Bar
public function __construct($data = [])
{
$this->GoodsActivityReport = new GoodsActivityReport();
$this->option = $this->id = 7;
// 分页的时候不重复查询数据
$currentPage = request()->input('page', 1);
if($currentPage == 1){
$data = $this->GoodsActivityReport->getCountData();
if(!empty($data) && is_array($data)){
$total = 0;
$subsidyTotal = 0;
foreach($data as $key => $value){
if($key < $this->showNumber){
$this->data[] = $value['total'];
$this->categories[] = $value['dtime'];
}
$total += $value['total'];
}
$this->total['number_total'] = $total;
}
}
parent::__construct();
}
@ -54,7 +33,7 @@ class OrderGoodsActivityTotalChart extends Bar
$color = Admin::color();
// 设置标题
$this->title('销售总数量(单)');
$this->subTitle(''.$this->showNumber.'天每天的销量');
$this->subTitle('其中'.$this->showNumber.'天每天的销量');
// 设置图表颜色
$this->chartColors([$color->primary()]);
@ -90,6 +69,24 @@ class OrderGoodsActivityTotalChart extends Bar
public function handle(Request $request)
{
// 数据查询逻辑
// 分页的时候不重复查询数据
$currentPage = request()->input('page', 1);
if($currentPage == 1){
$params = $this->parameters();
$data = $this->GoodsActivityReport->getCountData($params);
if(!empty($data) && is_array($data)){
$total = 0;
foreach($data as $key => $value){
if($key < $this->showNumber){
$this->data[] = $value['total'];
$this->categories[] = $value['dtime'];
}
$total += $value['total'];
}
$this->total['number_total'] = $total;
}
}
$data = $this->data;
$categories = $this->categories;
$chartData = [
@ -111,8 +108,12 @@ class OrderGoodsActivityTotalChart extends Bar
public function parameters(): array
{
return [
'id' => $this->id,
'option' => $this->option,
'page' => request()->input('page', 1),
'name' => request()->input('name', ''),
'market_id' => request()->input('market_id',0),
'store_id' => request()->input('store_id',0),
'start_time' => request()->input('start_time',''),
'end_time' => request()->input('end_time',''),
];
}
/**

Loading…
Cancel
Save