Browse Source

配送统计--导出功能完

master
liangyuyan 5 years ago
parent
commit
a52fe23e02
  1. 31
      app/Admin/Actions/Exporter/OrderDelivery.php
  2. 83
      app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php
  3. 88
      app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php
  4. 88
      app/Admin/Actions/Tools/OrderDeliveryExport.php
  5. 11
      app/Admin/Controllers/v3/OrderDeliveryReportController.php
  6. 3
      app/Admin/Repositories/v3/OrderDeliveryReport.php
  7. 1
      app/Admin/routes.php

31
app/Admin/Actions/Exporter/OrderDelivery.php

@ -0,0 +1,31 @@
<?php
namespace App\Admin\Actions\Exporter;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class OrderDelivery implements WithMultipleSheets
{
use Exportable;
protected $params = [];
public function __construct(array $params)
{
$this->params = $params;
}
/**
* @return array
*/
public function sheets(): array
{
$sheets = [];
$sheets[] = new OrderDeliveryTotalSheet($this->params);// 统计
$sheets[] = new OrderDeliveryDetailSheet($this->params);// 明细
return $sheets;
}
}

83
app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php

@ -0,0 +1,83 @@
<?php
namespace App\Admin\Actions\Exporter;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithTitle;
use App\Admin\Repositories\v3\OrderDeliveryReport;
use App\Models\v3\LanzuEmployees as EmployeesModel;
use App\Models\ImsCjdcOrderMain as OrderMainModel;
use App\Models\v3\Market as MarketModel;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
/**
* 配送统计总配送费
*/
class OrderDeliveryDetailSheet implements FromArray, WithStrictNullComparison, ShouldAutoSize, WithTitle, WithStyles
{
private $params;
public function __construct(array $params)
{
$this->params = $params;
}
public function array(): array
{
$titles = [[
'配送人员',
'订单编号',
'下单市场',
'下单时间',
'订单配送费',
]];
$data = $this->getData($this->params);
$markets = MarketModel::getMarketArray();
$list = [];
foreach ($data as $value){
$global_order_id = $value['global_order_id'] ?? '';
$delivery_money = $value['delivery_money'] ?? 0;
$list[] = [
$value['name'] ?? '',
' '.$global_order_id,
$markets[$value['market_id']] ?? '',
date('Y-m_d H:i:s',$value['created_at']),
$delivery_money+3.5
];
}
return array_merge($titles,$list);
}
public function styles(Worksheet $sheet)
{
return [
1 => ['font' => ['size' => 12]],
];
}
/**
* 获取数据
*/
public function getData($option = [])
{
$params = $option;
$repository = new OrderDeliveryReport();
$selects = EmployeesModel::TABLE_NAME.'.name,global_order_id,'.OrderMainModel::$tableName.'.market_id,'.OrderMainModel::$tableName.'.created_at,delivery_money';
$orderGoods = $repository->getDataModel($selects,$params);
$list = $orderGoods->get()->toArray();
return $list;
}
/**
* sheet 表名称
* @return string
*/
public function title(): string
{
return '配送明细';
}
}

88
app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php

@ -0,0 +1,88 @@
<?php
namespace App\Admin\Actions\Exporter;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStyles;
use App\Admin\Repositories\v3\OrderDeliveryReport;
use App\Models\v3\LanzuEmployees as EmployeesModel;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
/**
* 配送统计总配送费
*/
class OrderDeliveryTotalSheet implements FromArray, WithStrictNullComparison, ShouldAutoSize, WithTitle, WithHeadings, WithStyles
{
private $params;
public function __construct(array $params)
{
$this->params = $params;
}
public function headings(): array
{
$startTime = $this->params['start_time'] ?? null;
$endTime = $this->params['end_time'] ?? null;
if(empty($startTime) && empty($endTime)){
return ['统计全部'];
}
if(empty($startTime)){
$startTime = '2020-10-01';
}else{
$endTime = date('Y-m-d');
}
return [
'统计时间:'.$startTime.' 至 '.$endTime
];
}
public function array(): array
{
$titles = [[
'配送人员',
'总配送费',
]];
$data = $this->getData($this->params);
return array_merge($titles,$data);
}
public function styles(Worksheet $sheet)
{
$sheet->mergeCells('A1:B1');
return [
1 => ['font' => ['bold' => true,'size' => 12]],
2 => ['font' => ['size' => 12]],
];
}
/**
* 获取数据
*/
public function getData($option = [])
{
$params = $option;
$repository = new OrderDeliveryReport();
$selects = EmployeesModel::TABLE_NAME.'.name,SUM( CASE WHEN delivery_money=0 THEN 3.5 when delivery_money>0 THEN delivery_money+3.5 ELSE 0 END) as total_delivery';
$orderGoods = $repository->getDataModel($selects,$params);
$list = $orderGoods->groupBy(EmployeesModel::TABLE_NAME.'.name')->get()->toArray();
return $list;
}
/**
* sheet 表名称
* @return string
*/
public function title(): string
{
return '配送统计';
}
}

88
app/Admin/Actions/Tools/OrderDeliveryExport.php

@ -0,0 +1,88 @@
<?php
namespace App\Admin\Actions\Tools;
use Dcat\Admin\Actions\Response;
use Dcat\Admin\Traits\HasPermissions;
use Dcat\Admin\Tree\AbstractTool;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
class OrderDeliveryExport extends AbstractTool
{
/**
* @return string
*/
protected $title = '<span class="feather icon-download">导出<span>';
/**
* Handle the action request.
*
* @param Request $request
*
* @return Response
*/
public function handle(Request $request)
{
$url = '/delivery_report_export?';
$name = $request->get('name', '');
$horsemanId = $request->get('horseman_id',0);
$marketId = $request->get('market_id',0);
$storeId = $request->get('user_id',0);
$startTime = $request->get('start_time','');
$endTime = $request->get('end_time','');
if(!empty($name)){
$url .= '&name='.$name;
}
if(!empty($horsemanId)){
$url .= '&horseman_id='.$marketId;
}
if(!empty($marketId)){
$url .= '&market_id='.$marketId;
}
if(!empty($storeId)){
$url .= '&user_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 [
'name' => request()->input('name', ''),
'horseman_id' => request()->input('horseman_id',0),
'market_id' => request()->input('market_id',0),
'user_id' => request()->input('user_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;
}
}

11
app/Admin/Controllers/v3/OrderDeliveryReportController.php

@ -3,7 +3,7 @@
namespace App\Admin\Controllers\v3;
use App\Admin\Actions\Grid\v3\DataReportOption;
use App\Admin\Actions\Tools\GoodsReportExport;
use App\Admin\Actions\Tools\OrderDeliveryExport;
use App\Admin\Common\Auth;
use App\Admin\Renderable\OrderDeliveryById;
use App\Admin\Repositories\v3\OrderDeliveryReport;
@ -14,7 +14,6 @@ use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\v3\Market as MarketModel;
use App\Models\ImsCjdcUser as UserModel;
use App\Models\v3\LanzuEmployees as EmployeesModel;
class OrderDeliveryReportController extends AdminController
{
@ -90,7 +89,7 @@ class OrderDeliveryReportController extends AdminController
new DataReportOption('last_week','delivery_report','上周'),
new DataReportOption('this_month','delivery_report','本月'),
new DataReportOption('last_month','delivery_report','上月'),
new GoodsReportExport()
new OrderDeliveryExport()
]);
// 每页1条
@ -119,15 +118,15 @@ class OrderDeliveryReportController extends AdminController
{
$this->marketId = Auth::getMarket();
$params = [
'name' => request()->input('name', ''),
'horseman_id' => request()->input('horseman_id', 0),
'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0),
'store_id' => request()->input('store_id',0),
'user_id' => request()->input('user_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\GoodsSales($params);
$data = new \App\Admin\Actions\Exporter\OrderDelivery($params);
if(empty($data)){
return $this->error('没有数据!');
}

3
app/Admin/Repositories/v3/OrderDeliveryReport.php

@ -39,7 +39,8 @@ class OrderDeliveryReport extends EloquentRepository
$selects = 'count('.Model::$tableName.'.id) AS total_number,horseman_id,'.EmployeesModel::TABLE_NAME.'.user_id,'.EmployeesModel::TABLE_NAME.'.name,'.EmployeesModel::TABLE_NAME.'.market_id,SUM( CASE WHEN delivery_money=0 THEN 3.5 when delivery_money>0 THEN delivery_money+3.5 ELSE 0 END) as total_delivery';
$delivery = $this->getDataModel($selects,$where);
$list = $delivery->orderBy('total_number','desc')->groupBy('horseman_id',EmployeesModel::TABLE_NAME.'.market_id',EmployeesModel::TABLE_NAME.'.name',EmployeesModel::TABLE_NAME.'.user_id')->paginate($perPage);
$list = $delivery->groupBy('horseman_id',EmployeesModel::TABLE_NAME.'.market_id',EmployeesModel::TABLE_NAME.'.name',EmployeesModel::TABLE_NAME.'.user_id')->paginate($perPage);
// ->orderBy('total_number','desc')
$list = $list->toArray();
return $model->makePaginator(

1
app/Admin/routes.php

@ -99,5 +99,6 @@ Route::group([
// 配送统计
$router->resource('/delivery_report', 'v3\OrderDeliveryReportController');
$router->any('/delivery_report_export', 'v3\OrderDeliveryReportController@export');
});
Loading…
Cancel
Save