From e19e9d73de46e2b4288f51f5ccdc98f6e813e108 Mon Sep 17 00:00:00 2001 From: liangyuyan <1103300295@qq.com> Date: Fri, 23 Oct 2020 15:13:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=95=86=E5=93=81-=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E6=9C=8D=E5=8A=A1=E7=AB=99=E7=94=A8=E6=88=B7=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Actions/EXporter/GoodsActivitySales.php | 65 ++++++++++++++ .../Actions/Tools/GoodsActivityExport.php | 84 +++++++++++++++++++ .../v3/GoodsActivityReportController.php | 65 +++++++++++--- .../Repositories/v3/GoodsActivityReport.php | 14 +++- .../Charts/OrderGoodsActivityCountChart.php | 6 +- .../Charts/OrderGoodsActivityMarketChart.php | 6 +- .../Charts/OrderGoodsActivityTotalChart.php | 10 +-- app/Admin/routes.php | 1 + 8 files changed, 227 insertions(+), 24 deletions(-) create mode 100644 app/Admin/Actions/EXporter/GoodsActivitySales.php create mode 100644 app/Admin/Actions/Tools/GoodsActivityExport.php diff --git a/app/Admin/Actions/EXporter/GoodsActivitySales.php b/app/Admin/Actions/EXporter/GoodsActivitySales.php new file mode 100644 index 0000000..6a6432c --- /dev/null +++ b/app/Admin/Actions/EXporter/GoodsActivitySales.php @@ -0,0 +1,65 @@ +params = $params; + } + + public function array(): array + { + $result = [[ + '商品ID', + '商品名称', + '市场', + '店铺', + '售价(元)', + '原价(元)', + '销量(单)', + '补贴(元)', + ]]; + $data = $this->getData($this->params); + $markets = MarketModel::getMarketArray(); + $stores = StoreModel::getStoreArray(); + foreach ($data as $value){ + $item = [ + $value['goods_id'], + $value['name']??'', + $markets[$value['market_id']]??'', + $stores[$value['store_id']]??'', + $value['price']??0, + $value['original_price']??0, + $value['total']??0, + $value['subsidy_total']??0 + ]; + + $result[] = $item; + } + return $result; + } + + /** + * 获取数据 + */ + public function getData($option = []) + { + $params = $option; + $repository = new GoodsActivityReport(); + $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 = $repository->getDataModel($selects,$params); + $list = $orderGoodsActivity->orderBy('total','desc')->groupBy('goods_id','lanzu_order_goods.name','cover_img','market_id','store_id','price','original_price')->get()->toArray(); + + return $list; + } + +} diff --git a/app/Admin/Actions/Tools/GoodsActivityExport.php b/app/Admin/Actions/Tools/GoodsActivityExport.php new file mode 100644 index 0000000..c495fa9 --- /dev/null +++ b/app/Admin/Actions/Tools/GoodsActivityExport.php @@ -0,0 +1,84 @@ +导出'; + + /** + * Handle the action request. + * + * @param Request $request + * + * @return Response + */ + public function handle(Request $request) + { + $url = '/goods_activity_export?'; + $name = $request->get('name', ''); + $marketId = $request->get('market_id',0); + $storeId = $request->get('store_id',0); + $startTime = $request->get('start_time',''); + $endTime = $request->get('end_time',''); + + if(!empty($name)){ + $url .= '&name='.$name; + } + if(!empty($marketId)){ + $url .= '&market_id='.$marketId; + } + if(!empty($storeId)){ + $url .= '&store_id='.$storeId; + } + if(!empty($startTime)){ + $url .= '&start_time='.$startTime; + } + + if(!empty($endTime)){ + $url .= '&end_time='.$endTime; + } + return $this->response() + ->success('导出中~') + ->redirect($url); + } + public function parameters() + { + return [ + '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',''), + ]; + } + /** + * @return string|array|void + */ + public function confirm() + { + return '确定导出数据吗?'; + } + + /** + * @param Model|Authenticatable|HasPermissions|null $user + * + * @return bool + */ + protected function authorize($user): bool + { + return true; + } +} diff --git a/app/Admin/Controllers/v3/GoodsActivityReportController.php b/app/Admin/Controllers/v3/GoodsActivityReportController.php index b0aaa4e..77959a4 100644 --- a/app/Admin/Controllers/v3/GoodsActivityReportController.php +++ b/app/Admin/Controllers/v3/GoodsActivityReportController.php @@ -3,7 +3,8 @@ namespace App\Admin\Controllers\v3; use App\Admin\Actions\Grid\v3\DataReportOption; - +use App\Admin\Actions\Tools\GoodsActivityExport; +use App\Admin\Common\Auth; use App\Admin\Repositories\v3\GoodsActivityReport; use App\Admin\Widgets\Charts\OrderGoodsActivityCountChart; use App\Admin\Widgets\Charts\OrderGoodsActivityMarketChart; @@ -17,13 +18,16 @@ use Dcat\Admin\Grid\Filter; use Dcat\Admin\Layout\Content; use Dcat\Admin\Layout\Row; use Dcat\Admin\Widgets\Card; +use Illuminate\Http\Request; +use Maatwebsite\Excel\Facades\Excel; class GoodsActivityReportController extends AdminController { protected $GoodsActivityReport = null; + protected $marketId = 0; + protected $newParams = []; public function __construct() { - $this->GoodsActivityReport = new GoodsActivityReport(); } /** @@ -33,10 +37,15 @@ class GoodsActivityReportController extends AdminController */ protected function grid() { - return Grid::make($this->GoodsActivityReport, function (Grid $grid) { - - $marketList = MarketModel::getMarketArray(); - $storeList = StoreModel::getStoreArray(); + + return Grid::make(new GoodsActivityReport($this->newParams), function (Grid $grid) { + if($this->marketId){ + $marketList = MarketModel::getMarketArray([['id','=',$this->marketId]]); + $storeList = StoreModel::getStoreArray([['market_id','=',$this->marketId]]); + }else{ + $marketList = MarketModel::getMarketArray(); + $storeList = StoreModel::getStoreArray(); + } $grid->column('goods_id')->sortable(); $grid->column('cover_img')->image('',50); @@ -44,11 +53,11 @@ class GoodsActivityReportController extends AdminController $grid->column('market_id')->display(function($marketId){ $item = MarketModel::getMarketInfo($marketId,'name'); - return empty($item) ? '' : $item->name; + return $item->name ?? ''; }); $grid->column('store_id')->display(function($storeId){ $item = StoreModel::getStoreInfo($storeId,'name'); - return empty($item) ? '' : $item->name; + return $item->name ?? ''; })->width('12%'); $grid->column('price'); $grid->column('original_price'); @@ -61,7 +70,9 @@ class GoodsActivityReportController extends AdminController $filter->equal('start_time','开始时间')->date()->width(2); $filter->equal('end_time','结束时间')->date()->width(2); $filter->equal('name','商品名称')->width(3); - $filter->equal('market_id','市场')->select($marketList)->width(2); + if(!$this->marketId){ + $filter->equal('market_id','市场')->select($marketList)->width(2); + } $filter->equal('store_id','店铺')->select($storeList)->width(3); }); @@ -71,7 +82,8 @@ class GoodsActivityReportController extends AdminController new DataReportOption('this_week','goods_activity_report','本周'), new DataReportOption('last_week','goods_activity_report','上周'), new DataReportOption('this_month','goods_activity_report','本月'), - new DataReportOption('last_month','goods_activity_report','上月') + new DataReportOption('last_month','goods_activity_report','上月'), + new GoodsActivityExport() ]); // 每页1条 @@ -97,6 +109,10 @@ class GoodsActivityReportController extends AdminController */ public function index(Content $content) { + $this->marketId = Auth::getMarket(); + if($this->marketId){ + $this->newParams = ['market_id'=>$this->marketId]; + } return $content->title('活动商品统计') ->body(function(Row $row){ // $row->column(2,function (Column $column){ @@ -113,12 +129,35 @@ class GoodsActivityReportController extends AdminController // $card->style('background-color:#4e9876'); // $column->row($card); // }); - $row->column(4,new OrderGoodsActivityTotalChart()); - $row->column(4,new OrderGoodsActivityCountChart()); - $row->column(4,new OrderGoodsActivityMarketChart()); + $row->column(4,new OrderGoodsActivityTotalChart($this->newParams)); + $row->column(4,new OrderGoodsActivityCountChart($this->newParams)); + $row->column(4,new OrderGoodsActivityMarketChart($this->newParams)); }) ->body(function(Row $row){ $row->column(12,$this->grid()); }); } + + /** + * 数据导出 + * @return \Symfony\Component\HttpFoundation\BinaryFileResponse + */ + public function export(Request $request) + { + $params = [ + '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',''), + ]; + + $name = date('Y-m-d-His',time()); + $data = new \App\Admin\Actions\Exporter\GoodsActivitySales($params); + if(empty($data)){ + return $this->error('没有数据!'); + } + return Excel::download($data, $name.'.xlsx'); + } } diff --git a/app/Admin/Repositories/v3/GoodsActivityReport.php b/app/Admin/Repositories/v3/GoodsActivityReport.php index 0679da9..859f023 100644 --- a/app/Admin/Repositories/v3/GoodsActivityReport.php +++ b/app/Admin/Repositories/v3/GoodsActivityReport.php @@ -9,7 +9,7 @@ use Illuminate\Support\Facades\DB; class GoodsActivityReport extends EloquentRepository { - public $data = []; + public $params = []; /** * Model. * @@ -17,6 +17,11 @@ class GoodsActivityReport extends EloquentRepository */ protected $eloquentClass = Model::class; + public function __construct($params = []) + { + $this->params = $params; + } + /** * 获取统计列表数据 */ @@ -27,8 +32,13 @@ class GoodsActivityReport extends EloquentRepository // 获取每页显示行数 $perPage = $model->getPerPage(); + $where = []; + if(!empty($this->params) && isset($this->params['market_id']) && !empty($this->params['market_id'])){ + $where = ['market_id'=>$this->params['market_id']]; + } + $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); + $orderGoodsActivity = $this->getDataModel($selects,$where); $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(); diff --git a/app/Admin/Widgets/Charts/OrderGoodsActivityCountChart.php b/app/Admin/Widgets/Charts/OrderGoodsActivityCountChart.php index 7abf935..943124b 100644 --- a/app/Admin/Widgets/Charts/OrderGoodsActivityCountChart.php +++ b/app/Admin/Widgets/Charts/OrderGoodsActivityCountChart.php @@ -7,6 +7,7 @@ use Dcat\Admin\Admin; use Dcat\Admin\Support\JavaScript; use Dcat\Admin\Widgets\Metrics\Line; use Illuminate\Http\Request; +use App\Admin\Common\Auth; class OrderGoodsActivityCountChart extends Line { @@ -22,7 +23,7 @@ class OrderGoodsActivityCountChart extends Line public function __construct($data = []) { - $this->GoodsActivityReport = new GoodsActivityReport(); + $this->GoodsActivityReport = new GoodsActivityReport($data); parent::__construct(); } @@ -109,10 +110,11 @@ class OrderGoodsActivityCountChart extends Line */ public function parameters(): array { + $this->marketId = Auth::getMarket(); return [ 'page' => request()->input('page', 1), 'name' => request()->input('name', ''), - 'market_id' => request()->input('market_id',0), + 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0), 'store_id' => request()->input('store_id',0), 'start_time' => request()->input('start_time',''), 'end_time' => request()->input('end_time',''), diff --git a/app/Admin/Widgets/Charts/OrderGoodsActivityMarketChart.php b/app/Admin/Widgets/Charts/OrderGoodsActivityMarketChart.php index a6d6916..570ab8c 100644 --- a/app/Admin/Widgets/Charts/OrderGoodsActivityMarketChart.php +++ b/app/Admin/Widgets/Charts/OrderGoodsActivityMarketChart.php @@ -2,6 +2,7 @@ namespace App\Admin\Widgets\Charts; +use App\Admin\Common\Auth; use App\Admin\Repositories\v3\GoodsActivityReport; use Dcat\Admin\Widgets\Metrics\Donut; use Illuminate\Http\Request; @@ -22,7 +23,7 @@ class OrderGoodsActivityMarketChart extends Donut public function __construct($data = []) { - $this->GoodsActivityReport = new GoodsActivityReport(); + $this->GoodsActivityReport = new GoodsActivityReport($data); parent::__construct(); } @@ -83,10 +84,11 @@ class OrderGoodsActivityMarketChart extends Donut */ public function parameters(): array { + $this->marketId = Auth::getMarket(); return [ 'page' => request()->input('page', 1), 'name' => request()->input('name', ''), - 'market_id' => request()->input('market_id',0), + 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0), 'store_id' => request()->input('store_id',0), 'start_time' => request()->input('start_time',''), 'end_time' => request()->input('end_time',''), diff --git a/app/Admin/Widgets/Charts/OrderGoodsActivityTotalChart.php b/app/Admin/Widgets/Charts/OrderGoodsActivityTotalChart.php index e3e14e1..e99bd4f 100644 --- a/app/Admin/Widgets/Charts/OrderGoodsActivityTotalChart.php +++ b/app/Admin/Widgets/Charts/OrderGoodsActivityTotalChart.php @@ -2,6 +2,7 @@ namespace App\Admin\Widgets\Charts; +use App\Admin\Common\Auth; use App\Admin\Repositories\v3\GoodsActivityReport; use Dcat\Admin\Admin; use Dcat\Admin\Support\JavaScript; @@ -22,7 +23,7 @@ class OrderGoodsActivityTotalChart extends Bar public function __construct($data = []) { - $this->GoodsActivityReport = new GoodsActivityReport(); + $this->GoodsActivityReport = new GoodsActivityReport($data); parent::__construct(); } @@ -86,13 +87,11 @@ class OrderGoodsActivityTotalChart extends Bar $this->total['number_total'] = $total; } } - - $data = $this->data; $categories = $this->categories; $chartData = [ [ 'name' => '销量', - 'data' => $data, + 'data' => $this->data, ] ]; $this->withContent($this->total); @@ -107,10 +106,11 @@ class OrderGoodsActivityTotalChart extends Bar */ public function parameters(): array { + $this->marketId = Auth::getMarket(); return [ 'page' => request()->input('page', 1), 'name' => request()->input('name', ''), - 'market_id' => request()->input('market_id',0), + 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0), 'store_id' => request()->input('store_id',0), 'start_time' => request()->input('start_time',''), 'end_time' => request()->input('end_time',''), diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 52a25ff..d303aa3 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -89,5 +89,6 @@ Route::group([ $router->resource('/order_report', 'v3\OrderReportController'); // 活动商品统计 $router->any('/goods_activity_report', 'v3\GoodsActivityReportController@index'); + $router->any('/goods_activity_export', 'v3\GoodsActivityReportController@export'); });