RouteTransformer.php 2.9 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 数据转换层: Route 转换类
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Transformers
 * @package   App\Transformers
 * @author    Richer <yangzi1028@163.com>
 * @date      2023年3月2日16:55:36
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Transformers;

use App\Models\Route;
use App\Models\Traits\RouteTrait;
use Illuminate\Support\Arr;

/**
 * Class RouteTransformer
 * @package App\Transformers
 */
class RouteTransformer extends BaseTransformer
{
    use RouteTrait;
    /**
     * Transform the Route entity.
     *
     * @param Route $model
     *
     * @return array
     */
    public function transform(Route $model)
    {
        return [
            'id'            => (int) $model->id,

            /* place your other model properties here */
            'name'          => (string)$model->name,
            'description'   => (string)$model->description,
            'sites'         => $model->sites->map(function ($site) {
                return [
                    'name'      => (string)$site->site->name,
                    'longitude' => $site->site->longitude,
                    'latitude'  => $site->site->latitude,
                    'sort'      => (int)$site->sort,
                ];
            }),
            'buses' => $model->buses->map(function ($bus) use ($model) {
                // 根据最新定位信息获取站点的位置
                $location = $bus->location;
//                $next_site =  $this->getSiteByLocation($bus->id, $model->sites, $location);
                return [
                    'name'      => $bus->name,
                    'number'    => $bus->number,
                    'first_site' => Arr::get($location->site_info, 'first.site.name'),
                    'last_site' => Arr::get($location->site_info, 'last.site.name'),
                    'next_site' => Arr::get($location->site_info, 'next.site.name'),
                    'location'  => [
                        'longitude' => $location->longitude,
                        'latitude'  => $location->latitude,
                        'time'      => $location->gps_time,
//                        'site_info' => $location->site_info,
//                        'next_site' => Arr::get($location->site_info, 'next.site.name')
                    ],
                ];
            }),
            'sort'          => (int)$model->sort,
            'status'        => (int)$model->status,
            'status_show'   => (string)$model->status_show,
            'created_at'    => format_date($model->created_at),
            'updated_at'    => format_date($model->updated_at),
        ];
    }
}