id; $box = BoxBinding::query()->filter($filter) ->where(AdminMerchant::getMerchantWhere())->orderByDesc('id'); $box = $request->get('all') ? $box->get() : $box->paginate(); return $this->ok(BoxBindingResource::collection($box)); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * store 添加中控 * * @param Request $request * @param BoxBinding $box * @return \Illuminate\Http\JsonResponse * @author Fx * */ public function store(BoxBindingRequest $request, BoxBinding $box) { $inputs = $request->validated(); // if (!$inputs['merchant_id']) { $inputs['merchant_id'] = AdminMerchant::putMerchantId(); } $box = $box->updateOrCreate(['box_no' => $inputs['box_no']], $inputs); return $this->ok(BoxBindingResource::make($box)); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * update 更新中控 * * @param Request $request * @param $id * @return void * @author Fx * */ public function update(Request $request, $id) { // } public function updateRemark(RemarkRequest $request, $id) { // $box = BoxBinding::find($id); $inputs = $request->validated(); // Log::info($id); $box->update($inputs); return $this->ok(BoxBindingResource::make($box)); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } /** * import 导入excle * * @param Request $request * @return \Illuminate\Http\JsonResponse * @author Fx * */ public function import(Request $request) { try { Excel::import(new BoxBindingImport, $request->file('boxs')); return $this->ok('导入成功'); } catch (\Exception $e) { Log::error($e->getMessage()); return $this->error('导入失败'); } } /** * download 下载模板 * * @return \Symfony\Component\HttpFoundation\BinaryFileResponse * @author Fx * */ public function download() { return response()->download(public_path('example_box_template.xlsx')); } /** * unbindBox 解绑 * * @param $id * @return \Illuminate\Http\JsonResponse * @author Fx * */ public function unbindBox($id) { $box = BoxBinding::find($id); if (empty($box)) return $this->error('找不到该中控信息'); $box_no = $box->box_no; $bike = Bike::query()->where('box_no', $box_no)->first(); try { DB::beginTransaction(); // 更新绑定表 $box->is_binding = BoxBinding::BINDING_NO; $box->save(); // 更新车辆信息 if (!empty($bike)) { $bike->box_no = ''; $bike->blu_key = ''; $bike->blu_ase_key = ''; $bike->last_location = json_encode(['lng' => 116.397546, 'lat' => 39.909153]); $bike->save(); } DB::commit(); return $this->ok('解绑成功'); } catch (\Exception $e) { DB::rollBack(); Log::error($e->getMessage()); return $this->error('解绑失败,请联系管理员'); } } /** * 单个配置中控 setting * * @param BoxSettingRequest $boxSettingRequest * @param $id * @return \Illuminate\Http\JsonResponse * @author Fx * */ public function setting(BoxSettingRequest $boxSettingRequest, $id) { $inputs = $boxSettingRequest->validated(); unset($inputs['box_no']); unset($inputs['box_ids']); $boxBinding = BoxBinding::query()->find($id); $res = $boxBinding->update($inputs); if ($res) { // 发指令 if (strlen($boxBinding->box_no) < 10) { $setting = [ // 心跳间隔时间(秒) 'PULSE=' . $inputs['pulse'], // 骑行定位包间隔(秒) 'FREQ=' . $inputs['freq'], // 骑行时静止多少分钟报锁车(分) 'VIBFILTERREMINDT=' . $inputs['vibfilterremindt'], // 配置服务器地址 'SERVER=' . $inputs['server'], // 蓝牙秘钥 // 'DFTBLEENCKEY' => 'TBIT_WA205-7HBLE', // 蓝牙功能开关 // 'BLEKG='.$inputs['blekg'], //车的最高速度 // 'MAXECUSPEED=' . $inputs['maxecuspeed'], //车速度的百分比 'MAXSPEEDPERCENT=' . BikeControl::maxecuspeedToMaxspeedpercent($inputs['maxecuspeed']) ]; $result = BikeControl::setBoxSetting($boxBinding->box_no, $setting, true); } else { $setting = [ 'auto_lock_time' => $inputs['vibfilterremindt'], 'motion_position_reporting_interval' => $inputs['freq'], 'static_position_reporting_interval' => ceil($inputs['pulse'] / 60), ]; // 限速 // \App\Handlers\Weikemu\BikeControl::limitSpeed($boxBinding->box_no, \App\Handlers\Weikemu\BikeControl::maxecuspeedToMaxspeedpercent($inputs['maxecuspeed'])); // //配置域名 // $server = explode(':', $inputs['server']); // // if ($inputs['server'] !== $boxBinding->server) { // \App\Handlers\Weikemu\BikeControl::setBoxServerUrl($boxBinding->box_no, $server[0], $server[1]); // } \App\Handlers\Weikemu\BikeControl::setBoxSetting($boxBinding->box_no, $setting); $data = \App\Handlers\Weikemu\BikeControl::queryConfig($boxBinding->box_no); $result = object_array($data); $data1 = \App\Handlers\Weikemu\BikeControl::queryUrlConfig($boxBinding->box_no); $data1 = object_array($data1); $result['SERVER'] = $data1['SERVER']; } $result = []; return $this->ok($result); } else { return $this->error('操作失败'); } } /** * 批量配置中控 settingMul * * @param BoxSettingRequest $boxSettingRequest * @return \Illuminate\Http\JsonResponse * @author Fx * */ public function settingMul(BoxSettingRequest $boxSettingRequest) { $inputs = $boxSettingRequest->validated(); $ids = $inputs['box_ids']; unset($inputs['box_ids']); unset($inputs['box_no']); $res = BoxBinding::query()->whereIn('id', $ids)->update($inputs); // 发指令 if ($res) { $setting = [ // 心跳间隔时间(秒) 'PULSE=' . $inputs['pulse'], // 骑行定位包间隔(秒) 'FREQ=' . $inputs['freq'], // 骑行时静止多少分钟报锁车(分) 'VIBFILTERREMINDT=' . $inputs['vibfilterremindt'], // 配置服务器地址 'SERVER=' . $inputs['server'], // 蓝牙秘钥 // 'DFTBLEENCKEY' => 'TBIT_WA205-7HBLE', // 蓝牙功能开关 // 'BLEKG='.$inputs['blekg'], //车的最高速度 // 'MAXECUSPEED='.$inputs['maxecuspeed'], //车速度的百分比 'MAXSPEEDPERCENT=' . BikeControl::maxecuspeedToMaxspeedpercent($inputs['maxecuspeed']) ]; $boxs = BoxBinding::query()->whereIn('id', $ids)->get(); foreach ($boxs as $v) { // 发指令 if (strlen($v->box_no) < 10) { $data = BikeControl::setBoxSetting($v->box_no, $setting); } else { $server = explode(':', $inputs['server']); $setting = [ 'auto_lock_time' => $inputs['vibfilterremindt'], 'motion_position_reporting_interval' => $inputs['freq'], 'static_position_reporting_interval' => ceil($inputs['pulse'] / 60) ]; // \App\Handlers\Weikemu\BikeControl::limitSpeed($v->box_no, \App\Handlers\Weikemu\BikeControl::maxecuspeedToMaxspeedpercent($inputs['maxecuspeed'])); // sleep(1); \App\Handlers\Weikemu\BikeControl::setBoxSetting($v->box_no, $setting); // \App\Handlers\Weikemu\BikeControl::setBoxServerUrl($v->box_no, $server[0], $server[1]); } } return $this->ok('操作成功'); } else { return $this->error('操作失败'); } } /** * 获取服务器配置选项 getServerOptions * * @return \Illuminate\Http\JsonResponse * @author Fx * */ public function getServerOptions() { $servers = BoxBinding::query()->where(AdminMerchant::getMerchantWhere())->distinct()->pluck('server')->toArray(); $data = []; foreach ($servers as $v) { $data[] = ['label' => $v, 'value' => $v]; } return $this->ok($data); } public function queryConfig(Request $request) { $box_no = $request->get('box_no'); if (strlen($box_no) < 10) { $data = BikeControl::downBoxSetting($box_no); return $this->ok(object_array($data)); } else { $data = \App\Handlers\Weikemu\BikeControl::queryConfig($box_no); $data = object_array($data); $data1 = \App\Handlers\Weikemu\BikeControl::queryUrlConfig($box_no); $data1 = object_array($data1); $data['SERVER'] = $data1['SERVER']; return $this->ok($data); } } public function warningLogsIndex(WarningLogsFilter $filter) { $data = WarningLog::query() ->filter($filter) ->where(AdminMerchant::getMerchantWhere()) ->orderByDesc('id') ->paginate(); return $this->ok(WarningLogResource::collection($data)); } public function getWarningType() { $data = []; foreach (WarningLog::$typeMaps as $k => $v) { $data[] = [ 'label' => $v, 'value' => $k, ]; } return $this->ok($data); } }