BikeTransformer.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Mead
  5. * Date: 2019/8/5
  6. * Time: 2:44 PM
  7. */
  8. namespace App\Transformers;
  9. use App\Handlers\BatteryHandler;
  10. use App\Maps\CacheMap;
  11. use App\Models\AreaSetting;
  12. use App\Models\Bike;
  13. use App\Repositories\AreaSettingRepository;
  14. use Illuminate\Support\Facades\Cache;
  15. use League\Fractal\TransformerAbstract;
  16. class BikeTransformer extends TransformerAbstract
  17. {
  18. public function transform(Bike $model)
  19. {
  20. return [
  21. 'bike_no' => $model->bike_no,
  22. 'box_no' => $model->box_no,
  23. 'battery_power' => $model->battery_power,
  24. 'riding_bike_mileage' => (new BatteryHandler())->byElectricGetMileage($model->battery_power),
  25. 'is_link' => $model->is_link,
  26. 'put_status' => $model->put_status,
  27. 'is_low_battery_power' => $model->is_low_battery_power,
  28. 'is_trouble' => $model->is_trouble,
  29. 'is_riding' => $model->is_riding,
  30. 'status' => $model->status,
  31. 'activity' => $this->activity($model->put_area_id)
  32. ];
  33. }
  34. public function activity($bike_area_id)
  35. {
  36. $key = sprintf(CacheMap::AREA_SETTING_AREA_ID, $bike_area_id);;
  37. $areaSetting = Cache::remember($key, CacheMap::CACHE_TIME, function () use ($bike_area_id) {
  38. return AreaSetting::query()->where('area_id', $bike_area_id)->first();
  39. });
  40. if (empty($areaSetting)) return '';
  41. if ($areaSetting->is_minute_free == AreaSetting::FREE_MINUTE_OK) {
  42. $times = '';
  43. if ($areaSetting->minute_free_times > 0) {
  44. $times = "(每日限制 " . $areaSetting->minute_free_times . "次)";
  45. }
  46. return $areaSetting->many_minute_free . '分钟(包含)内免费骑行' . $times;
  47. } else {
  48. return '';
  49. }
  50. }
  51. public function isLowBatteryPower($model)
  52. {
  53. $area_id = $model->put_area_id;
  54. if ($area_id && !$model->is_low_battery_power) {
  55. $batteryPower = (new AreaSettingRepository(new AreaSetting()))->byAreaIdGetBatteryPower($area_id);
  56. if ($batteryPower > $model->battery_power) {
  57. return Bike::BATTERY_POWER_LOW;
  58. }
  59. return Bike::BATTERY_POWER_OK;
  60. }
  61. return $model->is_low_battery_power;
  62. }
  63. }