init
This commit is contained in:
645
application/api/controller/YqDriver.php
Normal file
645
application/api/controller/YqDriver.php
Normal file
@@ -0,0 +1,645 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\controller;
|
||||
|
||||
use app\admin\model\Article;
|
||||
use app\admin\model\yq\alarm\Alarm;
|
||||
use app\admin\model\yq\base_config\Cargo;
|
||||
use app\admin\model\yq\base_config\Early;
|
||||
use app\admin\model\yq\driver\Driver;
|
||||
use app\admin\model\yq\driver\Trouble;
|
||||
use app\admin\model\yq\electronic_waybill\Waybill;
|
||||
use app\admin\model\yq\message\Message;
|
||||
use app\admin\model\yq\park\Park;
|
||||
use app\common\controller\Api;
|
||||
use app\common\exception\UploadException;
|
||||
use app\common\library\Upload;
|
||||
use think\Cache;
|
||||
use think\Db;
|
||||
use think\Exception;
|
||||
use think\Loader;
|
||||
|
||||
|
||||
/**
|
||||
* 司机端接口管理
|
||||
*/
|
||||
class YqDriver extends Api
|
||||
{
|
||||
|
||||
protected $noNeedLogin = ['*'];
|
||||
protected $noNeedRight = ['*'];
|
||||
|
||||
protected $driver_id = null;
|
||||
protected $key = "A273781DBF8B7657";
|
||||
protected $method = 'AES-128-CBC';
|
||||
protected $iv = "E3041CDBBD37CC50";
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
if (!$this->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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user