100 lines
3.4 KiB
PHP
100 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace app\controller;
|
|
|
|
use app\model\Location;
|
|
use app\model\Vehicle;
|
|
use util\Util;
|
|
use support\Request;
|
|
|
|
class LocationController
|
|
{
|
|
/**
|
|
* Get all locations that have vehicles
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$locations = Location::with('vehicles')
|
|
->with(['fboVehicles' => function($query) {
|
|
$query->where([['status','!=', 4]]); // 对关联表 posts 加条件
|
|
}])
|
|
->whereIn('type',['port','warehouse'])
|
|
->get()
|
|
->map(function ($location) {
|
|
$location->vehicle_count = $location->vehicles->count();
|
|
$location->fbo_vehicle_count = $location->fboVehicles->count();
|
|
$location->count = ($location->vehicle_count > 0) ? $location->vehicle_count : $location->fbo_vehicle_count;
|
|
return $location;
|
|
});
|
|
foreach ($locations as &$location) {
|
|
unset($location->vehicles);
|
|
unset($location->fboVehicles);
|
|
}
|
|
return Util::success($locations);
|
|
}
|
|
|
|
/**
|
|
* Get all locations that have vehicles
|
|
*/
|
|
public function production(Request $request)
|
|
{
|
|
$where = [];
|
|
$status = $request->post('status', '');
|
|
if($status == 1){
|
|
$status = [5,6];
|
|
}elseif ($status == 2){
|
|
$status = [4];
|
|
}elseif ($status == 3){
|
|
$status = [1,2,3,7,8];
|
|
$where[] = ['vin' ,'<>', null];
|
|
}elseif ($status == 4){
|
|
$status = [1,2,3,7,8];
|
|
$where[] = ['vin' ,'=', null];
|
|
}
|
|
$vehicles = Vehicle::select('locations_id')->where($where)->whereNotNull('locations_id');
|
|
if(!empty($status)){
|
|
$vehicles = $vehicles->whereIn('status',$status);
|
|
}
|
|
$locations_id = $vehicles->groupBy('locations_id')->get();
|
|
$locations_id = $locations_id->pluck('locations_id')->toArray();
|
|
|
|
$locations = Location::
|
|
// with('vehicles')
|
|
// ->with('fboVehicles')
|
|
where(['type' => 'production'])
|
|
->whereIn('id',$locations_id)
|
|
->get();
|
|
// ->map(function ($location) {
|
|
// $location->vehicle_count = $location->vehicles->count();
|
|
// $location->fbo_vehicle_count = $location->fboVehicles->count();
|
|
// $location->count = ($location->vehicle_count > 0) ? $location->vehicle_count : $location->fbo_vehicle_count;
|
|
// return $location;
|
|
// });
|
|
foreach ($locations as &$location) {
|
|
$location->vehicle_count = Vehicle::where(['locations_id'=>$location->id])->count();
|
|
$location->fbo_vehicle_count = Vehicle::where(['fbo_locations_id'=>$location->id])->count();
|
|
$location->count = ($location->vehicle_count > 0) ? $location->vehicle_count : $location->fbo_vehicle_count;
|
|
|
|
$location->status = $request->post('status', '');
|
|
unset($location->vehicles);
|
|
unset($location->fboVehicles);
|
|
}
|
|
return Util::success($locations);
|
|
}
|
|
|
|
/**
|
|
* Get a specific location with its vehicles
|
|
*/
|
|
public function show(Request $request, $id)
|
|
{
|
|
$location = Location::hasVehicles()
|
|
->with('vehicles')
|
|
->find($id);
|
|
|
|
if (!$location) {
|
|
return Util::fail(null, 'Location not found or has no vehicles');
|
|
}
|
|
|
|
return Util::success($location);
|
|
}
|
|
}
|