driver_id) { if (!isset(getallheaders()['Token'])) { $this->error('非法请求~'); } $this->driver_id = $this->decrypt(getallheaders()['Token']); } } /** 获取基础配置信息 */ public function index() { $data = []; $this->success('success', $data); } //入园目的 public function mission() { $data = (new Park())->getMissionList(); $this->success('success', $data); } //载货品类 public function getProductCate() { $data = Cargo::list(); $this->success('success', $data); } //报警等级 public function getEarlyList() { $data = Early::select(); $this->success('success', $data); } //企业信息 public function getEnterpriseList() { $data = \app\admin\model\yq\perimeter\Enterprise::select(); $this->success('success', $data); } /** 司机信息 */ //登录 public function login() { $params = input(); if (empty($params['account']) || strlen($params['account']) > 10) { $this->error('请输入正确的账号'); } if (empty($params['password'])) { $this->error('请输入正确的密码'); } $driver = Driver::where('account', $params['account'])->find(); if (!$driver) { $this->error('账号不存在,请先注册'); } if ($driver['password'] != md5($params['password'])) { $this->error('密码错误'); } $this->driver_id = $driver['id']; $this->success('正在登录...', ['token' => $this->encrypt($driver['id'])]); } //注册 public function register() { $params = input(); if (empty($params['account']) || strlen($params['account']) > 10) { $this->error('请输入正确的真实姓名'); } if (empty($params['phone']) || !preg_match("/^1\d{10}$/", trim($params['phone']))) { $this->error('请输入正确的手机号码'); } $default_password = "123456"; $params['password'] = md5($default_password); $driver = Driver::where('account', $params['account'])->find(); if ($driver) { $this->error('真实姓名已被注册'); } $driver = Driver::where('phone', $params['phone'])->find(); if ($driver) { $this->error('手机号已被注册'); } $res = Driver::create([ 'account' => $params['account'], 'phone' => $params['phone'], 'password' => $params['password'], ]); if ($res) { $this->driver_id = $res->id; $this->success('注册成功,正在自动登录...', ['token' => $this->encrypt($res->id)]); } $this->error('注册失败,请检查'); } //退出 public function logout() { $this->driver_id = null; $this->success('退出成功'); } //自动登录 public function autoLogin() { $driver = Driver::where('id', $this->driver_id)->find(); if ($driver) { $this->driver_id = $driver['id']; $this->success('正在自动登录...', ['token' => $this->encrypt($driver['id'])]); } $this->error('自动登录失败'); } //修改信息 public function updateDriverInfo() { $params = input(); $driver = Driver::where('id', $this->driver_id)->find(); if (!$driver) { $this->error('未找到'); } if (empty($params['password'])) { unset($params['password']); } else { $params['password'] = md5($params['password']); } unset($params['mouth']); unset($params['lv']); unset($params['onPassage']); unset($params['status_text']); unset($params['create_time']); $res = Driver::update($params); if ($res) { $driver = Driver::where('id', $this->driver_id)->find(); $this->success('修改成功', $driver); } $this->error('修改失败'); } //司机信息 public function getDriverInfo() { $driver = Driver::where('id', $this->driver_id)->find(); if ($driver) { $driver['mouth'] = Waybill::where('driverid', $this->driver_id)->whereTime('create_time', 'month')->count('*'); $driver['onPassage'] = 0; $driver['lv'] = $driver['mouth'] == 0 ? '0.00%' : (floor($driver['onPassage'] / $driver['mouth'] * 100) / 100) . '%'; $this->success('', $driver); } $this->error('未找到'); } /** 车辆信息 */ //车辆列表 public function carList() { $driver = \app\admin\model\yq\driver\Vehicle::where('driver_id', $this->driver_id)->column('license'); $list = \app\admin\model\yq\vehicle\Vehicle::where('vehicleNo', 'in', $driver)->select(); $this->success('获取成功', $list); } //绑定车辆 public function bindVehicle() { $params = input(); if (empty($params['vehicleNo']) || !isset($params['vehicleNo'])) { $this->error('请输入车牌号'); } $info = \app\admin\model\yq\vehicle\Vehicle::where('vehicleNo', $params['vehicleNo'])->find(); if ($info) { $this->error('该车牌已被绑定'); } Db::startTrans(); try { \app\admin\model\yq\vehicle\Vehicle::create(['vehicleNo' => $params['vehicleNo']]); \app\admin\model\yq\driver\Vehicle::create(['license' => $params['vehicleNo'], 'driver_id' => $this->driver_id]); Db::commit(); $this->success('添加成功'); } catch (Exception $exception) { Db::rollback(); $this->error('添加失败' . $exception->getMessage()); } } //解除绑定 public function unbindVehicle() { $params = input(); $info = \app\admin\model\yq\driver\Vehicle::where(['license' => $params['vehicleNo'], 'driver_id' => $this->driver_id])->find(); if (!$info) { $this->error('不存在'); } Db::startTrans(); try { \app\admin\model\yq\vehicle\Vehicle::where('vehicleNo', $params['vehicleNo'])->delete(); \app\admin\model\yq\driver\Vehicle::where(['license' => $params['vehicleNo'], 'driver_id' => $this->driver_id])->delete(); Db::commit(); $this->success('删除成功'); } catch (Exception $exception) { Db::rollback(); $this->error('删除失败' . $exception->getMessage()); } } //修改车辆信息 public function updateBindVehicle() { $params = input(); if (empty($params['vehicleNo']) || !isset($params['vehicleNo'])) { $this->error('请输入车牌号'); } $info = \app\admin\model\yq\vehicle\Vehicle::where('vehicleNo', $params['vehicleNo'])->find(); if ($info) { $this->error('该车牌已被绑定'); } Db::startTrans(); try { $id = $params['id']; $info = \app\admin\model\yq\vehicle\Vehicle::where('id', $id)->find(); \app\admin\model\yq\driver\Vehicle::update(['license' => $params['vehicleNo']], ['license' => $info['vehicleNo'], 'driver_id' => $this->driver_id]); \app\admin\model\yq\vehicle\Vehicle::update(['vehicleNo' => $params['vehicleNo']], ['id' => $id]); Db::commit(); $this->success('修改成功'); } catch (Exception $exception) { Db::rollback(); $this->error('修改失败' . $exception->getMessage()); } } /** 园区入园 */ //列表 public function parkList() { $res = Park::where('reporter_id', $this->driver_id)->order('create_time desc')->select(); $this->success('获取成功', $res); } //上报 public function enParkReport() { $params = input(); $data = []; $data['reporter_id'] = $this->driver_id; $data['has_mount'] = $params['has_mount']; $data['mission'] = $params['mission']; $data['tractor_license'] = $params['tractor_license']; $data['mount_license'] = $params['mount_license']; $data['phone_num'] = $params['phone_num']; $data['reporter_name'] = $params['reporter_name']; $data['create_time'] = date('Y-m-d H:i:s', time()); $rule = [ 'mission' => 'require', 'phone_num' => 'require|mobile', 'tractor_license' => 'require|max:8|min:7', 'mount_license' => 'requireIf:has_mount,1', ]; $message = [ 'mission.require' => '请选择入园目的', 'phone_num.require' => '请填写手机号', 'tractor_license.require' => '请填写牵引车车牌号', 'phone_num.mobile' => '手机号格式错误', 'tractor_license.max' => '车牌号最多8位', 'tractor_license.min' => '车牌号最少7位', 'mount_license.requireIf' => '请填写挂车车牌号', ]; $validate = new \think\Validate($rule, $message); if (!$validate->check($data)) { $this->error($validate->getError()); } $res = Park::create($data); if ($res) { $this->success('上报成功'); } $this->error('上报失败'); } //详情 public function enParkInfo() { $params = input(); $res = Park::get($params['id']); if ($res) { $this->success('获取成功', $res); } $this->error('不存在'); } /** 电子运单 */ public function waybillList() { $where = []; $where['driverid'] = $this->driver_id; $params = input(); if (!empty($params['current']) && isset($params['current'])) { $where['check_status'] = $params['current'] - 1; } $res = Waybill::where($where)->order('create_time desc')->select(); $this->success('获取成功', $res); } //上报 public function waybillReport() { $params = input(); $data = [ 'cargocategory' => $params['cargocategory'], 'cargocount' => $params['cargocount'], 'driver_tel' => $params['driver_tel'], 'mount_license' => $params['mount_license'] ?? '无', 'sale_product' => $params['sale_product'], 'tow_license' => $params['tow_license'], 'w_mission' => $params['w_mission'], 'waybill_date' => $params['waybill_date'], 'waybill_loading' => $params['waybill_loading'], 'waybill_name' => $params['waybill_name'], 'waybill_unloading' => $params['waybill_unloading'], 'driverid' => $this->driver_id, 'create_time' => date('Y-m-d H:i:s', time()), 'waybill_order' => 'CS' . date('Ymd', time()) . 'DD' . substr(time(), 2, 8) ]; $rule = [ 'cargocategory' => 'require', 'cargocount' => 'require', 'driver_tel' => 'require|mobile', 'sale_product' => 'require|max:20', 'tow_license' => 'require|max:8|min:7', 'w_mission' => 'require', 'waybill_name' => 'require', 'waybill_unloading' => 'requireIf:w_mission,卸货', 'waybill_loading' => 'requireIf:w_mission,装货', ]; $message = [ 'cargocategory.require' => '请填写装/卸货品类', 'cargocount.require' => '请填写装/卸货数量', 'driver_tel.require' => '请填写司机电话', 'sale_product.require' => '请填写销售产品', 'tow_license.require' => '请填写牵引车牌', 'w_mission.require' => '请填写入园目的', 'waybill_name.require' => '请填写运单人', 'driver_tel.mobile' => '司机电话格式错误', 'sale_product.max' => '销售产品名称控制在20个字符内', 'tow_license.max' => '车牌号最多8位', 'tow_license.min' => '车牌号最少7位', 'waybill_unloading.requireIf' => '卸货时必须填写卸货信息', 'waybill_loading.requireIf' => '装货时必须填写装货单位', ]; $validate = new \think\Validate($rule, $message); if (!$validate->check($data)) { $this->error($validate->getError()); } Db::startTrans(); try { $res = Waybill::create($data); //写入一条提示信息 Message::create([ 'driver_id' => $this->driver_id, 'type' => 3, 'event_id' => $res->id, 'vehicle_no' => $params['tow_license'] ?? '', 'create_time' => date('Y-m-d H:i:s', time()), ]); Db::commit(); $this->success('上报成功'); } catch (Exception $exception) { Db::rollback(); // 记录详细错误日志 \think\Log::error('运单上报失败: ' . $exception->getMessage() . PHP_EOL . $exception->getTraceAsString()); \think\Log::error('上报参数: ' . json_encode($params, JSON_UNESCAPED_UNICODE)); $this->error('上报失败: ' . $exception->getMessage()); } } //详情 public function waybillInfo() { $params = input(); $res = Waybill::get($params['id']); if ($res) { $this->success('获取成功', $res); } $this->error('不存在'); } /** 车辆事故 */ public function troubleList() { $res = Alarm::where('reporter_id', $this->driver_id)->order('create_time desc')->select(); $this->success('获取成功', $res); } //上报 public function troubleReport() { $params = input(); $data = [ 'reporter_id' => $this->driver_id, 'license' => $params['license'], 'mount_license' => $params['mount_license'], 'has_mount' => $params['has_mount'], 'phone' => $params['phone'], 'perimeter_location' => $params['perimeter_location'], 'perimeter_point' => $params['perimeter_point'], 'type' => $params['type'], 'describe' => $params['describe'], 'id_card' => $params['id_card'], 'trigger_type' => 2, 'name' => $params['name'], 'create_time' => date('Y-m-d H:i:s',time()), ]; $rule = [ 'license' => 'require|max:8|min:7', 'phone' => 'require|mobile', 'perimeter_location' => 'require|max:50', 'type' => 'require', 'id_card' => 'require', 'mount_license' => 'requireIf:has_mount,1', ]; $message = [ 'license.require' => '请填写牵引车车牌', 'phone.require' => '请填写手机号', 'id_card.require' => '请填写身份证号', 'perimeter_location.require' => '请填写位置信息', 'phone.mobile' => '司机电话格式错误', 'latlng_address.max' => '位置信息控制在50个字符内', 'license.min' => '牵引车牌号最少7位', 'license.max' => '牵引车牌号最多8位', 'mount_license.requireIf' => '有挂车时请填写挂车车牌号', ]; $validate = new \think\Validate($rule, $message); if (!$validate->check($data)) { $this->error($validate->getError()); } $data['lv'] = Early::where('id', $params['type'])->value('lv'); $data['reporter_name'] = Driver::where('id', $this->driver_id)->value('account'); $res = Alarm::create($data); if ($res) { $this->success('上报成功'); } $this->error('上报失败'); } //详情 public function troubleInfo() { $params = input(); $res = Alarm::get($params['id']); if ($res) { $this->success('获取成功', $res); } $this->error('不存在'); } /** 报警信息 */ //列表 public function alarmList() { $params = input(); $where = []; if (!empty($params['cate_id']) && isset($params['cate_id'])) { $where['type'] = $params['cate_id'] == 0 ? 3 : 1; } $res = Message::where('driver_id', $this->driver_id)->where($where)->select(); foreach ($res as $k => $v) { $res[$k]['car'] = Cargo::get($v['m_id']); } $this->success('获取成功', $res); } //详情 public function alarmInfo() { $params = input(); $res = Message::where(['driver_id' => $this->driver_id, 'id' => $params['id']])->find(); $res['car'] = Cargo::get($res['m_id']); $this->success('获取成功', $res); } /** 帮助中心 */ //列表 public function articleList() { $res = Article::select(); $this->success('获取成功', $res); } //详情 public function articleInfo() { $params = input(); $res = Article::where(['id' => $params['id']])->find(); $this->success('获取成功', $res); } /** 上传图片 */ public function upload() { $attachment = null; //默认普通上传文件 $file = $this->request->file('file'); try { $upload = new Upload($file); $attachment = $upload->upload(); } catch (UploadException $e) { $this->error($e->getMessage()); } catch (\Exception $e) { $this->error($e->getMessage()); } $this->success(__('Uploaded successful'), ['url' => $attachment->url, 'fullurl' => cdnurl($attachment->url, true)]); } //token解密 public function decrypt($input) { $encrypted = base64_decode($input); return openssl_decrypt( $encrypted, $this->method, $this->key, OPENSSL_RAW_DATA, $this->iv ); } //token加密 public function encrypt($input) { $encryptedText = openssl_encrypt( $input, $this->method, $this->key, OPENSSL_RAW_DATA, $this->iv ); return base64_encode($encryptedText); } }