diff --git a/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php b/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php index 3847e85..881d5bc 100644 --- a/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php +++ b/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php @@ -37,7 +37,7 @@ class OrderDeliveryDetailSheet implements FromArray, WithStrictNullComparison, S $data = $this->getData($this->params); $markets = MarketModel::getMarketArray(); $list = []; - $baseFee = config('admin.delivery.base_fee'); + $baseFee = config('admin.delivery.base_fee',0); foreach ($data as $value){ $global_order_id = $value['global_order_id'] ?? ''; $delivery_money = $value['delivery_money'] ?? 0; diff --git a/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php b/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php index 42a8c28..5e57d00 100644 --- a/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php +++ b/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php @@ -72,7 +72,7 @@ class OrderDeliveryTotalSheet implements FromArray, WithStrictNullComparison, Sh public function getData($option = []) { $params = $option; - $baseFee = config('admin.delivery.base_fee'); + $baseFee = config('admin.delivery.base_fee',0); $repository = new OrderDeliveryReport(); $selects = EmployeesModel::TABLE_NAME.'.name,SUM( CASE WHEN delivery_money=0 THEN '.$baseFee.' when delivery_money>0 THEN delivery_money+'.$baseFee.' ELSE 0 END) as total_delivery'; diff --git a/app/Admin/Actions/Tools/OrderDeliveryExport.php b/app/Admin/Actions/Tools/OrderDeliveryExport.php index 9426245..6220f41 100644 --- a/app/Admin/Actions/Tools/OrderDeliveryExport.php +++ b/app/Admin/Actions/Tools/OrderDeliveryExport.php @@ -49,7 +49,6 @@ class OrderDeliveryExport extends AbstractTool if(!empty($startTime)){ $url .= '&start_time='.$startTime; } - if(!empty($endTime)){ $url .= '&end_time='.$endTime; } diff --git a/app/Admin/Controllers/v3/OrderDeliveryReportController.php b/app/Admin/Controllers/v3/OrderDeliveryReportController.php index 59725f3..88e6dc8 100644 --- a/app/Admin/Controllers/v3/OrderDeliveryReportController.php +++ b/app/Admin/Controllers/v3/OrderDeliveryReportController.php @@ -14,6 +14,9 @@ use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; use App\Models\v3\Market as MarketModel; use App\Models\ImsCjdcUser as UserModel; +use Dcat\Admin\Layout\Content; +use Dcat\Admin\Layout\Row; +use Dcat\Admin\Widgets\Alert; class OrderDeliveryReportController extends AdminController { @@ -24,12 +27,7 @@ class OrderDeliveryReportController extends AdminController protected $marketId = 0; protected $newParams = []; protected $marketList = []; - protected $storeList = []; - public function __construct() - { - $this->newParams['start_time'] = date('Y-m-d',time()); - $this->newParams['end_time'] = date('Y-m-d',time()); - } + protected $tools = []; /** * Make a grid builder. @@ -38,17 +36,16 @@ class OrderDeliveryReportController extends AdminController */ protected function grid() { - $this->marketId = Auth::getMarket(); - - if($this->marketId){ - $this->newParams = ['market_id'=>$this->marketId]; + $marketId = $this->marketId; + if($marketId){ + $this->newParams = ['market_id'=>$marketId]; $builder = new OrderDeliveryReport($this->newParams); - $this->marketList = MarketModel::getMarketArray([['id','=',$this->marketId]]); + $this->marketList = MarketModel::getMarketArray([['id','=',$marketId]]); }else{ $builder = new OrderDeliveryReport($this->newParams); $this->marketList = MarketModel::getMarketArray(); } - return Grid::make($builder, function (Grid $grid) { + return Grid::make($builder, function (Grid $grid) use($marketId){ $marketList = $this->marketList; $grid->column('horseman_id','配送员ID'); $grid->column('user_id','懒ID'); @@ -59,49 +56,41 @@ class OrderDeliveryReportController extends AdminController })->image('',50); $grid->column('name','姓名'); - $grid->column('market_id','市场')->display(function($marketId) use($marketList){ - return $marketList[$marketId] ?? ''; + $grid->column('market_id','市场')->display(function($market_id) use($marketList){ + return $marketList[$market_id] ?? ''; }); $grid->column('total_number','配送单数') - ->modal(function($modal) { - $name = $this->name; - $modal->title($name.'的配送明细'); + ->modal(function($modal) use($marketId){ + + $modal->title($this->name.'的配送明细'); $params = [ 'horseman_id' => $this->horseman_id, - 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0), + 'market_id' => $marketId, 'user_id' => request()->input('user_id',0), 'start_time' => request()->input('start_time', ''), 'end_time' => request()->input('end_time', ''), ]; - + // dd($params); $table = OrderDeliveryById::make($params); return $table; })->help('只统计2020年10月01日之后(包括10月01日)的数据'); $grid->column('total_delivery','总配送费'); - $grid->filter(function (Filter $filter) use($marketList) { + $grid->filter(function (Filter $filter) use($marketList,$marketId){ // 更改为 panel 布局 $filter->panel(); $filter->equal('start_time','开始时间')->date()->width(2); $filter->equal('end_time','结束时间')->date()->width(2); - $filter->equal('horseman_id','配送员ID')->width(2); + // $filter->equal('horseman_id','配送员ID')->width(2); $filter->equal('user_id','懒ID')->width(2); $filter->equal('name','姓名')->width(2); - if(!$this->marketId){ + if(!$marketId){ $filter->equal('market_id','市场')->select($marketList)->width(2); } }); - $grid->tools([ - new DataReportOption('today','delivery_report','今日'), - new DataReportOption('yesterday','delivery_report','昨日'), - new DataReportOption('this_week','delivery_report','本周'), - new DataReportOption('last_week','delivery_report','上周'), - new DataReportOption('this_month','delivery_report','本月'), - new DataReportOption('last_month','delivery_report','上月'), - new OrderDeliveryExport() - ]); + $grid->tools($this->tools); // 每页1条 $grid->paginate(10); @@ -121,6 +110,45 @@ class OrderDeliveryReportController extends AdminController }); } + /** + * 统计列表 + */ + /** + * 页面 + */ + public function index(Content $content) + { + $this->marketId = Auth::getMarket(); + + $this->tools = [ + new DataReportOption('today','delivery_report','今日'), + new DataReportOption('yesterday','delivery_report','昨日'), + new DataReportOption('this_week','delivery_report','本周'), + new DataReportOption('last_week','delivery_report','上周'), + new DataReportOption('this_month','delivery_report','本月'), + new DataReportOption('last_month','delivery_report','上月') + ]; + $startTime = request()->get('start_time'); + $endTime = request()->get('end_time'); + $user_id = request()->get('user_id'); + $name = request()->get('name'); + $marketId = request()->get('market_id'); + if( + ($this->marketId && (empty($startTime) && empty($endTime) && empty($user_id) && empty($name)) + || + (empty($startTime) && empty($endTime) && empty($user_id) && empty($name) && empty($marketId)) + )){ + $content->row(Alert::make('请选择筛选条件查询!','')->removable()); + }else{ + $this->tools[] = new OrderDeliveryExport(); + } + + return $content->title('订单配送统计报表') + ->body(function(Row $row){ + $row->column(12,$this->grid()); + }); + } + /** * 数据导出 * @return \Symfony\Component\HttpFoundation\BinaryFileResponse @@ -135,16 +163,10 @@ class OrderDeliveryReportController extends AdminController 'start_time' => request()->input('start_time', ''), 'end_time' => request()->input('end_time', ''), ]; - if(empty($params['start_time']) && empty($params['end_time'])){ - $params['start_time'] = $this->newParams['start_time']; - $params['end_time'] = $this->newParams['end_time']; - } $name = date('Y-m-d-His',time()); $data = new \App\Admin\Actions\Exporter\OrderDelivery($params); - if(empty($data)){ - return $this->error('没有数据!'); - } + return Excel::download($data, $name.'.xlsx'); } } diff --git a/app/Admin/Renderable/OrderDeliveryById.php b/app/Admin/Renderable/OrderDeliveryById.php index b2953d0..3c4a597 100644 --- a/app/Admin/Renderable/OrderDeliveryById.php +++ b/app/Admin/Renderable/OrderDeliveryById.php @@ -17,10 +17,7 @@ class OrderDeliveryById extends LazyRenderable $startTime = $this->start_time ?? null; $endTime = $this->end_time ?? null; $marketId = $this->market_id ?? 0; - if(empty($startTime) && empty($endTime)){ - $startTime = date('Y-m-d', time()); - $endTime = date('Y-m-d', time()); - } + $model = OrderMainModel::where('type', OrderMainModel::ORDER_TYPE_ONLINE) ->where('shipping_type', OrderMainModel::ORDER_SHIPPING_TYPE_MARKET) ->whereIn('state',OrderMainModel::ORDER_STATE_FINISH) @@ -36,9 +33,7 @@ class OrderDeliveryById extends LazyRenderable $endTime = $endTime.' 23:59:59'; $model->where('created_at','<=',strtotime($endTime)); } - if($marketId > 0){ - $model->where('market_id',$marketId); - } + return Grid::make($model, function (Grid $grid) use($marketId){ $marketList = MarketModel::getMarketArray(); @@ -51,15 +46,19 @@ class OrderDeliveryById extends LazyRenderable ->using( OrderMainModel::STATE_LIST ); + $grid->column('delivery_money','配送费')->display(function($delivery_money){ + $baseFee = config('admin.delivery.base_fee',0); + return $delivery_money + $baseFee; + }); $grid->column('created_at','下单时间')->display(function($createdAt){ return date('Y-m-d H:i:s',$createdAt); }); // 搜索 $grid->filter(function (Grid\Filter $filter) use($marketList, $marketId){ - $filter->equal('user_id','下单用户懒ID')->width(3); + $filter->equal('user_id','下单用户懒ID')->width(4); - $filter->equal('global_order_id','订单编号')->width(3); + $filter->equal('global_order_id','订单编号')->width(4); if(!$marketId){ $filter->equal('market_id','下单市场')->select($marketList)->width(4); } diff --git a/app/Admin/Repositories/v3/OrderDeliveryReport.php b/app/Admin/Repositories/v3/OrderDeliveryReport.php index 443da6e..5e47035 100644 --- a/app/Admin/Repositories/v3/OrderDeliveryReport.php +++ b/app/Admin/Repositories/v3/OrderDeliveryReport.php @@ -36,11 +36,22 @@ class OrderDeliveryReport extends EloquentRepository if(!empty($this->params) && isset($this->params['market_id']) && !empty($this->params['market_id'])){ $where['market_id'] = $this->params['market_id']; } - if(!($model->filter()->input('start_time') || $model->filter()->input('end_time'))){ - $where['start_time'] = $this->params['start_time']; - $where['end_time'] = $this->params['end_time']; + if( + empty($model->filter()->input('start_time')) + && + empty($model->filter()->input('end_time')) + && + empty($model->filter()->input('user_id')) + && + empty($model->filter()->input('name')) + && + empty($model->filter()->input('market_id')) + ){ + return $model->makePaginator( + 0,[] + ); } - $baseFee = config('admin.delivery.base_fee'); + $baseFee = config('admin.delivery.base_fee',0); $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 '.$baseFee.' when delivery_money>0 THEN delivery_money+'.$baseFee.' ELSE 0 END) as total_delivery'; $delivery = $this->getDataModel($selects,$where); $list = $delivery->groupBy('horseman_id',EmployeesModel::TABLE_NAME.'.market_id',EmployeesModel::TABLE_NAME.'.name',EmployeesModel::TABLE_NAME.'.user_id')->paginate($perPage); diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 935ac58..2b42a06 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -99,7 +99,7 @@ Route::group([ // 配送统计 - $router->resource('/delivery_report', 'v3\OrderDeliveryReportController'); + $router->any('/delivery_report', 'v3\OrderDeliveryReportController@index'); $router->any('/delivery_report_export', 'v3\OrderDeliveryReportController@export'); diff --git a/app/Models/ImsCjdcOrderMain.php b/app/Models/ImsCjdcOrderMain.php index 6b04e4e..94cac0e 100644 --- a/app/Models/ImsCjdcOrderMain.php +++ b/app/Models/ImsCjdcOrderMain.php @@ -64,7 +64,7 @@ class ImsCjdcOrderMain extends Model self::ORDER_SHIPPING_TYPE_MARKET => '服务站配送', self::ORDER_SHIPPING_TYPE_DADA => '达达配送', self::ORDER_SHIPPING_TYPE_USER_SELF => '用户自提' - ] + ]; const TABLE_NAME = 'lanzu_order_main'; // 订单支付方式 // 微信支付