diff --git a/app/Admin/Actions/Exporter/OrderDelivery.php b/app/Admin/Actions/Exporter/OrderDelivery.php new file mode 100644 index 0000000..2a6ea9b --- /dev/null +++ b/app/Admin/Actions/Exporter/OrderDelivery.php @@ -0,0 +1,31 @@ +params = $params; + } + + /** + * @return array + */ + public function sheets(): array + { + $sheets = []; + + $sheets[] = new OrderDeliveryTotalSheet($this->params);// 统计 + $sheets[] = new OrderDeliveryDetailSheet($this->params);// 明细 + + return $sheets; + } + +} diff --git a/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php b/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php new file mode 100644 index 0000000..fb3a06a --- /dev/null +++ b/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php @@ -0,0 +1,83 @@ +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 '配送明细'; + } +} \ No newline at end of file diff --git a/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php b/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php new file mode 100644 index 0000000..27b6367 --- /dev/null +++ b/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php @@ -0,0 +1,88 @@ +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 '配送统计'; + } +} \ No newline at end of file diff --git a/app/Admin/Actions/Tools/OrderDeliveryExport.php b/app/Admin/Actions/Tools/OrderDeliveryExport.php new file mode 100644 index 0000000..9426245 --- /dev/null +++ b/app/Admin/Actions/Tools/OrderDeliveryExport.php @@ -0,0 +1,88 @@ +导出'; + + /** + * 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; + } +} diff --git a/app/Admin/Controllers/v3/OrderDeliveryReportController.php b/app/Admin/Controllers/v3/OrderDeliveryReportController.php index 8876b12..2170f7d 100644 --- a/app/Admin/Controllers/v3/OrderDeliveryReportController.php +++ b/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('没有数据!'); } diff --git a/app/Admin/Repositories/v3/OrderDeliveryReport.php b/app/Admin/Repositories/v3/OrderDeliveryReport.php index ce4e6e8..7bd77f0 100644 --- a/app/Admin/Repositories/v3/OrderDeliveryReport.php +++ b/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( diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 5f1e4b1..25846ae 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -99,5 +99,6 @@ Route::group([ // 配送统计 $router->resource('/delivery_report', 'v3\OrderDeliveryReportController'); + $router->any('/delivery_report_export', 'v3\OrderDeliveryReportController@export'); });