diff --git a/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php b/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php index 487f37f..881d5bc 100644 --- a/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php +++ b/app/Admin/Actions/Exporter/OrderDeliveryDetailSheet.php @@ -37,6 +37,7 @@ class OrderDeliveryDetailSheet implements FromArray, WithStrictNullComparison, S $data = $this->getData($this->params); $markets = MarketModel::getMarketArray(); $list = []; + $baseFee = config('admin.delivery.base_fee',0); foreach ($data as $value){ $global_order_id = $value['global_order_id'] ?? ''; $delivery_money = $value['delivery_money'] ?? 0; @@ -45,7 +46,7 @@ class OrderDeliveryDetailSheet implements FromArray, WithStrictNullComparison, S ' '.$global_order_id, $markets[$value['market_id']] ?? '', date('Y-m_d H:i:s',$value['created_at']), - $delivery_money+3.5 + $delivery_money+$baseFee ]; } return array_merge($titles,$list); diff --git a/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php b/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php index e06352b..5e57d00 100644 --- a/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php +++ b/app/Admin/Actions/Exporter/OrderDeliveryTotalSheet.php @@ -72,8 +72,9 @@ class OrderDeliveryTotalSheet implements FromArray, WithStrictNullComparison, Sh public function getData($option = []) { $params = $option; + $baseFee = config('admin.delivery.base_fee',0); $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'; + $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'; $orderGoods = $repository->getDataModel($selects,$params); $list = $orderGoods->groupBy(EmployeesModel::TABLE_NAME.'.name')->get()->toArray(); 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 ba975e1..7f1b963 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 { @@ -21,10 +24,10 @@ class OrderDeliveryReportController extends AdminController * 订单的配送统计 */ protected $GoodsActivityReport = null; - public $marketId = 0; - public $newParams = []; - public $marketList = []; - public $storeList = []; + protected $marketId = 0; + protected $newParams = []; + protected $marketList = []; + protected $tools = []; /** * Make a grid builder. @@ -33,19 +36,18 @@ 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(); + $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('horseman_id','配送员ID'); $grid->column('user_id','懒ID'); $grid->column('avatar','微信头像')->display(function(){ $userId = $this->user_id ?? 0; @@ -54,43 +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.'的配送明细'); - $startTime = request()->input('start_time') ?? null; - $endTime = request()->input('end_time') ?? null; - $table = OrderDeliveryById::make(['horseman_id'=>$this->horseman_id,'start_time'=>$startTime, 'end_time'=>$endTime]); + ->modal(function($modal) use($marketId){ + + $modal->title($this->name.'的配送明细'); + $params = [ + 'horseman_id' => $this->horseman_id, + '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('user_id','懒ID')->width(2); + // $filter->equal('horseman_id','配送员ID')->width(2); + $filter->equal('user_id','懒ID')->placeholder('多个懒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); @@ -110,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 @@ -121,15 +160,13 @@ class OrderDeliveryReportController extends AdminController 'horseman_id' => request()->input('horseman_id', 0), 'market_id' => $this->marketId ? $this->marketId : request()->input('market_id',0), 'user_id' => request()->input('user_id',0), - 'start_time' => request()->input('start_time',''), - 'end_time' => request()->input('end_time',''), + '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\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 2ed7c14..3c4a597 100644 --- a/app/Admin/Renderable/OrderDeliveryById.php +++ b/app/Admin/Renderable/OrderDeliveryById.php @@ -2,7 +2,6 @@ namespace App\Admin\Renderable; use Dcat\Admin\Grid; -use App\Admin\Common\Type; use Dcat\Admin\Grid\LazyRenderable; use App\Models\ImsCjdcOrderMain as OrderMainModel; use App\Models\v3\Market as MarketModel; @@ -17,7 +16,12 @@ class OrderDeliveryById extends LazyRenderable $horsemanId = $this->horseman_id ?? 0; $startTime = $this->start_time ?? null; $endTime = $this->end_time ?? null; - $model = OrderMainModel::where('type',1)->where('shipping_type',1)->whereIn('state',OrderMainModel::ORDER_STATE_FINISH)->where('created_at','>=',strtotime('2020-10-01 00:00:00'));; + $marketId = $this->market_id ?? 0; + + $model = OrderMainModel::where('type', OrderMainModel::ORDER_TYPE_ONLINE) + ->where('shipping_type', OrderMainModel::ORDER_SHIPPING_TYPE_MARKET) + ->whereIn('state',OrderMainModel::ORDER_STATE_FINISH) + ->where('created_at','>=',strtotime('2020-10-01 00:00:00'));; if($horsemanId > 0){ $model->where('horseman_id',$horsemanId); } @@ -29,7 +33,8 @@ class OrderDeliveryById extends LazyRenderable $endTime = $endTime.' 23:59:59'; $model->where('created_at','<=',strtotime($endTime)); } - return Grid::make($model, function (Grid $grid) { + + return Grid::make($model, function (Grid $grid) use($marketId){ $marketList = MarketModel::getMarketArray(); $grid->column('global_order_id','订单编号'); @@ -41,18 +46,23 @@ 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){ - - $filter->equal('user_id','下单用户懒ID')->width(3); - - $filter->equal('global_order_id','订单编号')->width(3); + $grid->filter(function (Grid\Filter $filter) use($marketList, $marketId){ - $filter->equal('market_id','下单市场')->select($marketList)->width(4); + $filter->equal('user_id','下单用户懒ID')->width(4); + $filter->equal('global_order_id','订单编号')->width(4); + if(!$marketId){ + $filter->equal('market_id','下单市场')->select($marketList)->width(4); + } + $filter->whereBetween('created_at',function($q){ $start = $this->input['start'] ?? null; $end = $this->input['end'] ?? null; @@ -77,13 +87,15 @@ class OrderDeliveryById extends LazyRenderable { // 获取外部传递的参数 $horsemanId = $this->payload['horseman_id'] ?? 0; - $startTime = $this->payload['start_time'] ? request()->input('start_time') : null; - $endTime = $this->payload['end_time'] ? request()->input('end_time') : null; + $startTime = $this->payload['start_time'] ?? request()->input('start_time', null); + $endTime = $this->payload['end_time'] ?? request()->input('end_time', null); + $marketId = $this->payload['market_id'] ?? 0; return [ 'horseman_id' => $horsemanId, 'start_time' => $startTime, 'end_time' => $endTime, + 'market_id' => $marketId, ]; } } \ No newline at end of file diff --git a/app/Admin/Repositories/v3/OrderDeliveryReport.php b/app/Admin/Repositories/v3/OrderDeliveryReport.php index cd4f6e8..a1392c2 100644 --- a/app/Admin/Repositories/v3/OrderDeliveryReport.php +++ b/app/Admin/Repositories/v3/OrderDeliveryReport.php @@ -34,10 +34,25 @@ class OrderDeliveryReport extends EloquentRepository $where = []; if(!empty($this->params) && isset($this->params['market_id']) && !empty($this->params['market_id'])){ - $where = ['market_id'=>$this->params['market_id']]; + $where['market_id'] = $this->params['market_id']; } - - $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'; + 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',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); // ->orderBy('total_number','desc') @@ -57,17 +72,19 @@ class OrderDeliveryReport extends EloquentRepository $startTime = $params['start_time'] ?? request()->input('start_time',''); $endTime = $params['end_time'] ?? request()->input('end_time',''); + // 外卖类型 type = 1 $model = Model::select(DB::raw($selects)) // ->with('employees:id,user_id,name,market_id') ->join(EmployeesModel::TABLE_NAME,EmployeesModel::TABLE_NAME.'.id','=',Model::$tableName.'.horseman_id','left') - ->where(Model::$tableName.'.type',1) - ->where('shipping_type',1) + ->where(Model::$tableName.'.type', Model::ORDER_TYPE_ONLINE) + ->where('shipping_type', Model::ORDER_SHIPPING_TYPE_MARKET) ->whereIn('state',Model::ORDER_STATE_FINISH) ->where(Model::$tableName.'.created_at','>=',strtotime('2020-10-01 00:00:00')); if($userId){ - $model->where(EmployeesModel::TABLE_NAME.'.user_id',$userId); + $userId = explode(',',$userId); + $model->whereIn(EmployeesModel::TABLE_NAME.'.user_id',$userId); } if($name){ $model->where(EmployeesModel::TABLE_NAME.'.name','like',"%$name%"); @@ -80,10 +97,10 @@ class OrderDeliveryReport extends EloquentRepository $model->where(Model::$tableName.'.created_at','>=',strtotime($startTime)); } if($endTime){ - $endTime = $endTime.' 23:59:59'; + $endTime = $endTime.' 23:59:59'; $model->where(Model::$tableName.'.created_at','<=',strtotime($endTime)); } - + return $model; } 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 332ba5a..94cac0e 100644 --- a/app/Models/ImsCjdcOrderMain.php +++ b/app/Models/ImsCjdcOrderMain.php @@ -16,6 +16,11 @@ class ImsCjdcOrderMain extends Model // 线下订单,当面付 const ORDER_TYPE_OFFLINE = 4; + // 配送方式:1服务站配送,2达达配送,3用户自提 shipping_type + const ORDER_SHIPPING_TYPE_MARKET = 1; + const ORDER_SHIPPING_TYPE_DADA = 2; + const ORDER_SHIPPING_TYPE_USER_SELF = 3; + // 订单状态 // 待付款 const ORDER_STATE_UNPAY = 1; @@ -55,6 +60,11 @@ class ImsCjdcOrderMain extends Model self::ORDER_STATE_UNREFUND => '拒绝退款', self::ORDER_STATE_REBATES => '部分退款', ]; + const SHIPPING_TYPE_LIST = [ + self::ORDER_SHIPPING_TYPE_MARKET => '服务站配送', + self::ORDER_SHIPPING_TYPE_DADA => '达达配送', + self::ORDER_SHIPPING_TYPE_USER_SELF => '用户自提' + ]; const TABLE_NAME = 'lanzu_order_main'; // 订单支付方式 // 微信支付 diff --git a/config/admin.php b/config/admin.php index d653267..8f689d1 100644 --- a/config/admin.php +++ b/config/admin.php @@ -374,11 +374,21 @@ return [ /* |-------------------------------------------------------------------------- - | Settings for password. + | Settings for store user. |-------------------------------------------------------------------------- | */ 'setting' => [ 'authkey' => '5705e957' ], + + /* + |-------------------------------------------------------------------------- + | delivery for order. + |-------------------------------------------------------------------------- + | 订单配送 + */ + 'delivery' => [ + 'base_fee' => 3.5 // 配送基础费用 + ], ];