diff --git a/app/Admin/Controllers/v3/OrderDeliveryReportController.php b/app/Admin/Controllers/v3/OrderDeliveryReportController.php index 0e5ce97..e41821d 100644 --- a/app/Admin/Controllers/v3/OrderDeliveryReportController.php +++ b/app/Admin/Controllers/v3/OrderDeliveryReportController.php @@ -5,17 +5,15 @@ namespace App\Admin\Controllers\v3; use App\Admin\Actions\Grid\v3\DataReportOption; use App\Admin\Actions\Tools\GoodsReportExport; use App\Admin\Common\Auth; -use App\Admin\Repositories\v3\GoodsReport; - +use App\Admin\Repositories\v3\OrderDeliveryReport; use Dcat\Admin\Grid; use Dcat\Admin\Controllers\AdminController; -use App\Models\v3\Market as MarketModel; -use App\Models\v3\Store as StoreModel; - use Dcat\Admin\Grid\Filter; - 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 { @@ -39,57 +37,56 @@ class OrderDeliveryReportController extends AdminController if($this->marketId){ $this->newParams = ['market_id'=>$this->marketId]; - $builder = new GoodsReport($this->newParams); + $builder = new OrderDeliveryReport($this->newParams); $this->marketList = MarketModel::getMarketArray([['id','=',$this->marketId]]); - $this->storeList = StoreModel::getStoreArray([['market_id','=',$this->marketId]]); }else{ - $builder = new GoodsReport(); + $builder = new OrderDeliveryReport(); $this->marketList = MarketModel::getMarketArray(); - $this->storeList = StoreModel::getStoreArray(); } return Grid::make($builder, function (Grid $grid) { $marketList = $this->marketList; - $storeList = $this->storeList; - $grid->column('goods_id')->sortable(); - $grid->column('cover_img')->image('',50); - $grid->column('name','商品名称'); + $grid->column('horseman_id','ID'); + $grid->column('user_id','懒ID'); + $grid->column('avatar','微信头像')->display(function(){ + $userId = $this->user_id ?? 0; + $item = UserModel::select('avatar')->find($userId); + return $item['avatar'] ?? ''; + })->image('',50); + $grid->column('name','姓名'); - $grid->column('market_id')->display(function($marketId){ + $grid->column('market_id','市场')->display(function($marketId){ $item = MarketModel::getMarketInfo($marketId,'name'); return $item->name ?? ''; }); - $grid->column('store_id')->display(function($storeId){ - $item = StoreModel::getStoreInfo($storeId,'name'); - return $item->name ?? ''; - })->width('12%'); - $grid->column('price'); - $grid->column('original_price'); - $grid->column('number'); - $grid->column('created_at')->display(function($createdAt){ - return date('Y-m-d H:I:s',$createdAt) ?? ''; - }); - $grid->column('global_order_id')->help('统计订单状态为已完成的商品'); - $grid->filter(function (Filter $filter) use($marketList,$storeList) { + $grid->column('total_number','配送单数') + ->modal(function($modal){ + $name = $this->name; + $modal->title($name.'的余额明细'); + $table = StoreBalance::make(['user_id'=>$this->user_id]); + return $table; + }); + $grid->column('total_delivery','总配送费'); + + $grid->filter(function (Filter $filter) use($marketList) { // 更改为 panel 布局 $filter->panel(); $filter->equal('start_time','开始时间')->date()->width(2); $filter->equal('end_time','结束时间')->date()->width(2); - $filter->equal('goods_id','商品ID')->width(2); - $filter->equal('name','商品名称')->width(2); + $filter->equal('user_id','懒ID')->width(2); + $filter->equal('name','姓名')->width(2); if(!$this->marketId){ $filter->equal('market_id','市场')->select($marketList)->width(2); } - $filter->equal('store_id','店铺')->select($storeList)->width(2); }); $grid->tools([ - new DataReportOption('today','goods_report','今日'), - new DataReportOption('yesterday','goods_report','昨日'), - new DataReportOption('this_week','goods_report','本周'), - new DataReportOption('last_week','goods_report','上周'), - new DataReportOption('this_month','goods_report','本月'), - new DataReportOption('last_month','goods_report','上月'), + 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 GoodsReportExport() ]); diff --git a/app/Admin/Renderable/OrderDeliveryById.php b/app/Admin/Renderable/OrderDeliveryById.php new file mode 100644 index 0000000..218fa8c --- /dev/null +++ b/app/Admin/Renderable/OrderDeliveryById.php @@ -0,0 +1,89 @@ +horseman_id ?? 0; + $model = new OrderMainModel(); + if($horsemanId > 0){ + $model->where('horseman_id',$horsemanId); + } + + return Grid::make($model, function (Grid $grid) { + $grid->column('id','ID'); + $grid->column('user_id','配送员姓名'); + $grid->column('global_order_id','订单编号'); + $grid->column('market_id','下单市场'); + + $grid->column('created_at','下单时间')->display(function($createdAt){ + return date('Y-m-d H:i:s',$createdAt);; + }); + + $grid->column('status','状态') + ->using( + [] + ) + ->label( + config('label.status_label') + ); + $grid->column('created_at')->display(function($createdAt){ + return date('Y-m-d H:i:s',$createdAt); + }); + // 搜索 + $grid->filter(function (Grid\Filter $filter){ + $userTypeList = Type::USER_TYPE_LIST; + $moneyTypeList = Type::MONEY_TYPE_LIST; + $sourceTYpeList = Type::SOURCE_TYPE_LIST; + unset($userTypeList[0],$moneyTypeList[0]); + + $filter->equal('id','流水表ID')->width(3); + $filter->equal('user_id','账户ID')->width(3); + $filter->equal('current_balance','账户余额')->width(3); + + $filter->equal('money','流水金额')->width(3); + $filter->equal('source_id','关联流水ID')->width(3); + + $filter->equal('money_type','流水类型')->select($userTypeList)->width(4); + $filter->equal('user_type','账户类型')->select($moneyTypeList)->width(4); + $filter->equal('source_type','关联类型')->select($sourceTYpeList)->width(4); + + $filter->whereBetween('created_at',function($q){ + $start = $this->input['start'] ?? null; + $end = $this->input['end'] ?? null; + if($start !== null){ + $q->where('created_at','>=',strtotime($start)); + } + if($end !== null){ + $q->where('created_at','<=',strtotime($end)); + } + })->datetime()->width(7); + }); + $grid->model()->orderBy('id','desc'); + // 每页10条 + $grid->paginate(10); + + $grid->disableActions(); + $grid->disableRowSelector(); + }); + } + + public function default() + { + // 获取外部传递的参数 + $horsemanId = $this->payload['horseman_id'] ?? 0; + + return [ + 'horseman_id' => $horsemanId, + ]; + } +} \ No newline at end of file diff --git a/app/Admin/Repositories/v3/OrderDeliveryReport.php b/app/Admin/Repositories/v3/OrderDeliveryReport.php index 67dd5e2..897f3d6 100644 --- a/app/Admin/Repositories/v3/OrderDeliveryReport.php +++ b/app/Admin/Repositories/v3/OrderDeliveryReport.php @@ -2,13 +2,11 @@ namespace App\Admin\Repositories\v3; -use App\Models\LanzuOrderGoods as Model; +use App\Models\ImsCjdcOrderMain as Model; use Dcat\Admin\Grid\Model as GridModel; use Dcat\Admin\Repositories\EloquentRepository; use Illuminate\Support\Facades\DB; -use App\Models\ImsCjdcOrderMain as OrderMainModel; -use App\Models\ImsCjdcOrder as OrderModel; - +use App\Models\v3\LanzuEmployees as EmployeesModel; class OrderDeliveryReport extends EloquentRepository { public $params = []; @@ -38,84 +36,53 @@ 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']]; } - - $selects = Model::$tableName.'.goods_id,'.Model::$tableName.'.name,price,original_price,'.Model::$tableName.'.cover_img,'.OrderMainModel::$tableName.'.market_id,'.OrderModel::$tableName.'.store_id,number,'.OrderMainModel::$tableName.'.created_at,global_order_id'; - $orderGoods = $this->getDataModel($selects,$where); - $list = $orderGoods->orderBy(OrderMainModel::$tableName.'.id','desc')->paginate($perPage); + + $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 = $list->toArray(); return $model->makePaginator( $list['total'] ?? 0,$list['data'] ?? [] ); - } public function getDataModel($selects,$params = []) { // 获取筛选参数 - $goodsId = $params['goods_id'] ?? request()->input('goods_id',0); + $userId = $params['user_id'] ?? request()->input('user_id',0); $name = $params['name'] ?? request()->input('name', ''); $marketId = $params['market_id'] ?? request()->input('market_id',0); - $storeId = $params['store_id'] ?? request()->input('store_id',0); - + $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) + ->whereIn('state',[4,5,10,11]); - $orderGoods = Model::select(DB::raw($selects)) - ->join(OrderModel::$tableName,Model::$tableName.'.order_id','=',OrderModel::$tableName.'.id') - ->join(OrderMainModel::$tableName,OrderModel::$tableName.'.order_main_id','=',OrderMainModel::$tableName.'.global_order_id') - ->where(Model::$tableName.'.activity_type',1) - ->where(Model::$tableName.'.status',1) - ->whereIn(OrderMainModel::$tableName.'.state',[4,5,10,11]); - - if($goodsId){ - $goodsIds = explode(',',$goodsId); - $orderGoods->whereIn(Model::$tableName.'.goods_id',$goodsIds); + if($userId){ + $model->where(EmployeesModel::TABLE_NAME.'.user_id',$userId); } if($name){ - $orderGoods->where(Model::$tableName.'.name','like',"%$name%"); + $model->where(EmployeesModel::TABLE_NAME.'.name','like',"%$name%"); } if($marketId){ - $orderGoods->where('market_id',$marketId); - } - if($storeId){ - $orderGoods->where('store_id',$storeId); + $model->where(EmployeesModel::TABLE_NAME.'.market_id',$marketId); } if($startTime){ $startTime = $startTime.' 00:00:00'; - - $orderGoods->where(Model::$tableName.'.created_at','>=',strtotime($startTime)); + $model->where(Model::$tableName.'.created_at','>=',strtotime($startTime)); } if($endTime){ $endTime = $endTime.' 23:59:59'; - - $orderGoods->where(Model::$tableName.'.created_at','<=',strtotime($endTime)); + $model->where(Model::$tableName.'.created_at','<=',strtotime($endTime)); } - - return $orderGoods; - } - - /** - * 获取总数 - */ - public function getCountData($params = []) - { - $selects = "SUM(lanzu_order_goods.number) as total,SUM((original_price-price)*number) as subsidy_total,FROM_UNIXTIME(lanzu_order_goods.created_at,'%Y-%m-%d') as dtime"; - $orderGoods = $this->getDataModel($selects,$params); - $total = $orderGoods->orderBy('dtime','asc')->groupBy('dtime')->get()->toArray(); - - return $total ?? []; + + return $model; } - /** - * 分市场获取 - */ - public function getMarketData($params = []) - { - $selects = "SUM(lanzu_order_goods.number) as total,SUM((original_price-price)*number) as subsidy_total,market_id"; - $orderGoods = $this->getDataModel($selects,$params); - $total = $orderGoods->groupBy('market_id')->get()->toArray(); - - return $total ?? []; - } } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index bccdd3d..5f1e4b1 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -96,5 +96,8 @@ Route::group([ //普通商品统计 $router->resource('/goods_report', 'v3\GoodsReportController'); $router->any('/goods_report_export', 'v3\GoodsReportController@export'); + + // 配送统计 + $router->resource('/delivery_report', 'v3\OrderDeliveryReportController'); }); diff --git a/app/Models/ImsCjdcOrderMain.php b/app/Models/ImsCjdcOrderMain.php index 9bc5744..658395b 100644 --- a/app/Models/ImsCjdcOrderMain.php +++ b/app/Models/ImsCjdcOrderMain.php @@ -7,6 +7,7 @@ use Dcat\Admin\Traits\HasDateTimeFormatter; use App\Models\v3\Market as MarketModel; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; +use App\Models\v3\LanzuEmployees as EmployeesModel; class ImsCjdcOrderMain extends Model { @@ -141,4 +142,12 @@ class ImsCjdcOrderMain extends Model $count = $builder->count(); return $count; } + + /** + * 关联懒族员工表 + */ + public function employees() + { + return $this->belongsTo(new EmployeesModel(),'horseman_id','id','left'); + } } diff --git a/app/Models/v3/LanzuEmployees.php b/app/Models/v3/LanzuEmployees.php index 5ed4d81..da184bc 100644 --- a/app/Models/v3/LanzuEmployees.php +++ b/app/Models/v3/LanzuEmployees.php @@ -10,7 +10,7 @@ class LanzuEmployees extends Model { use HasDateTimeFormatter; use SoftDeletes; - + const TABLE_NAME = 'lanzu_employees'; protected $table = 'lanzu_employees'; protected $dateFormat = 'U'; diff --git a/resources/lang/zh-CN/order-delivery-report.php b/resources/lang/zh-CN/order-delivery-report.php new file mode 100644 index 0000000..6be9b83 --- /dev/null +++ b/resources/lang/zh-CN/order-delivery-report.php @@ -0,0 +1,14 @@ + [ + 'OrderDeliveryReport' => '配送统计报表', + 'order_delivery_report' => '配送统计报表', + 'delivery_report' => '配送统计', + ], + 'fields' => [ + 'user_id' => '懒ID', + 'name' => '姓名', + ], + 'options' => [ + ], +];