From 18b733ec6be4a8636a878d1d1909d47508ad3295 Mon Sep 17 00:00:00 2001 From: unknown <736250432@qq.com> Date: Thu, 31 Aug 2023 17:32:55 +0800 Subject: [PATCH] update --- .../controller/vehicle/VehicleController.php | 15 +++ app/adminapi/logic/vehicle/VehicleLogic.php | 112 +++++++++++++++++- app/common.php | 24 ++++ 3 files changed, 149 insertions(+), 2 deletions(-) diff --git a/app/adminapi/controller/vehicle/VehicleController.php b/app/adminapi/controller/vehicle/VehicleController.php index 4652d47f..19812e58 100644 --- a/app/adminapi/controller/vehicle/VehicleController.php +++ b/app/adminapi/controller/vehicle/VehicleController.php @@ -74,5 +74,20 @@ class VehicleController extends BaseAdminController return $this->data($result); } + public function vehicleLogisticLists() { + $params = (new VehicleValidate())->goCheck('detail'); + $result = VehicleLogic::vehicleLogisticLists($params); + return $this->success('请求成功',$result); + } + + public function vehicleLogisticDetail() { + $params = $this->request->get(['car_id','order_id']); + if(empty($params['car_id']) || empty($params['order_id'])){ + return $this->fail('缺少参数'); + } + $result = VehicleLogic::vehicleLogisticDetail($params); + return $this->data($result); + } + } \ No newline at end of file diff --git a/app/adminapi/logic/vehicle/VehicleLogic.php b/app/adminapi/logic/vehicle/VehicleLogic.php index ccac10cb..fdf82721 100644 --- a/app/adminapi/logic/vehicle/VehicleLogic.php +++ b/app/adminapi/logic/vehicle/VehicleLogic.php @@ -2,6 +2,8 @@ namespace app\adminapi\logic\vehicle; use app\common\logic\GpsLogic; +use app\common\model\logistics\Logistics; +use app\common\model\logistics\Product; use app\common\model\vehicle\Vehicle; use app\common\logic\BaseLogic; use app\common\model\vehicle\VehicleRent; @@ -79,11 +81,117 @@ class VehicleLogic extends BaseLogic { $data = Vehicle::findOrEmpty($params['id']); $data['mileage'] = 0; + //获取车辆运行轨迹 + $gpsCarInfo = (new GpsLogic()) -> info($data['gps_imei']); + if($gpsCarInfo['code'] == 0){ + $data['track_info'] = []; + }else{ + //获取车辆行驶历史信息 + $gpsCarHistory = (new GpsLogic()) -> history([ + 'gps_car_id' => $gpsCarInfo['data']['carId'], + 'start_time' => date('Y-m-d').' 00:00:00', + 'end_time' => date('Y-m-d').' 23:59:59' + ]); + if($gpsCarHistory['code'] == 0){ + $data['track_info'] = []; + }else{ + $position = []; + foreach($gpsCarHistory['data'] as $k=> $v){ + $position[$k]['lat'] = $v['latc']; + $position[$k]['lon'] = $v['lonc']; + } + $data['track_info'] = $position; + } + } + //获取车辆使用情况 + $data['travel_info'] = []; if($data['status'] == 2){ //获取租赁信息 - $data['rent_info'] = VehicleRent::where('car_id',$data['id'])->find(); - + $rentInfo = VehicleRent::where('car_id',$data['id'])->find(); + $data['rent_info'] = !empty($rentInfo) ? $rentInfo : []; + //获取物流信息 + $logistic = Logistics::field('order_id,order_sn,shop_name,user_name,receiver_address,qh_time,ps_time')->where('courier_id',$rentInfo['use_user_id'])->where('status',1)->limit(10)->select()->each(function($item){ + $qhTime = !empty($item['qh_time']) ? strtotime($item['qh_time']) : time(); + $diffTime = timeDiff($qhTime,time()); + $item['diff_time'] = $diffTime['day'].'天'.$diffTime['hour'].'小时'.$diffTime['min'].'分钟'.$diffTime['sec'].'秒'; + $product_count = 0; + //获取产品信息 + $item['products'] = Product::field('product_num,cart_info')->where('order_id', $item['order_id'])->select()->each(function($pro_item) use(&$product_count){ + $pro_item['cart_info'] = json_decode($pro_item['cart_info'], true); + $pro_item['goods_name'] = $pro_item['cart_info']['product']['store_name']; + $pro_item['goods_unit'] = $pro_item['cart_info']['product']['unit_name']; + $product_count += $pro_item['product_num']; + unset($pro_item['cart_info']); + return $pro_item; + }); + $item['product_count'] = $product_count; + }); + $data['logistic_info'] = !empty($logistic) ? $logistic : []; } return $data->toArray(); } + + public static function vehicleLogisticLists($params){ + $info = Vehicle::field('id,license,status,type')->findOrEmpty($params['id'])->toArray(); + $rent = VehicleRent::field('use_user_id,use_user_name,use_user_phone')->where('car_id',$info['id'])->findOrEmpty()->toArray(); + $data = array_merge($info,$rent); + $data['total_package'] = Logistics::field('order_id')->where('courier_id',$data['use_user_id'])->where('status',1)->count(); + $goodsTotal = 0; + Logistics::field('order_id')->where('courier_id',$data['use_user_id'])->where('status',1)->select()->each(function($item)use(&$goodsTotal){ + $count = 0; + Product::field('product_num,cart_info')->where('order_id', $item['order_id'])->select()->each(function($pro_item)use(&$count){ + $pro_item['cart_info'] = json_decode($pro_item['cart_info'], true); + $pro_item['goods_name'] = $pro_item['cart_info']['product']['store_name']; + $pro_item['goods_unit'] = $pro_item['cart_info']['product']['unit_name']; + $count += $pro_item['product_num']; + unset($pro_item['cart_info']); + })->toArray(); + $case['count'] = $count; + $goodsTotal += $case['count']; + }); + $data['total_goods'] = $goodsTotal; + $pageNo = isset($params['page_no']) ? $params['page_no'] : 1; + $pageSize = isset($params['page_size']) ? $params['page_size'] : 15; + //获取物流信息 + $logistic = Logistics::field('order_id,order_sn,shop_name,user_name,receiver_address,qh_time,ps_time')->where('courier_id',$data['use_user_id'])->where('status',1)->page($pageNo,$pageSize)->order('qh_time desc')->select()->each(function($item){ + $qhTime = !empty($item['qh_time']) ? strtotime($item['qh_time']) : time(); + $diffTime = timeDiff($qhTime,time()); + $item['diff_time'] = $diffTime['day'].'天'.$diffTime['hour'].'小时'.$diffTime['min'].'分钟'.$diffTime['sec'].'秒'; + $product_count = 0; + //获取产品信息 + $item['products'] = Product::field('product_num,cart_info')->where('order_id', $item['order_id'])->select()->each(function($pro_item) use(&$product_count){ + $pro_item['cart_info'] = json_decode($pro_item['cart_info'], true); + $pro_item['goods_name'] = $pro_item['cart_info']['product']['store_name']; + $pro_item['goods_unit'] = $pro_item['cart_info']['product']['unit_name']; + $product_count += $pro_item['product_num']; + unset($pro_item['cart_info']); + return $pro_item; + }); + $item['product_count'] = $product_count; + })->toArray(); + return ['basic'=>$data,'lists'=>$logistic,'count'=>$data['total_package'],'page_no'=>$pageNo,'page_size'=>$pageSize]; + } + + public static function vehicleLogisticDetail($params){ + $info = Vehicle::field('id,license,status,type')->findOrEmpty($params['car_id'])->toArray(); + $rent = VehicleRent::field('use_user_id,use_user_name,use_user_phone')->where('car_id',$info['id'])->findOrEmpty()->toArray(); + $logistic = Logistics::field('order_sn,user_name,receiver_address,shop_name,shop_address,create_time,qh_time')->where('order_id',$params['order_id'])->findOrEmpty()->toArray(); + $qhTime = !empty($logistic['qh_time']) ? strtotime($logistic['qh_time']) : time(); + $diffTime = timeDiff($qhTime,time()); + $logistic['diff_time'] = $diffTime['day'].'天'.$diffTime['hour'].'小时'.$diffTime['min'].'分钟'.$diffTime['sec'].'秒'; + $basic = array_merge($info,$rent,$logistic); + + //获取商品 + $goods = Product::field('product_num,cart_info')->where('order_id', $params['order_id'])->select()->each(function($pro_item){ + $pro_item['cart_info'] = json_decode($pro_item['cart_info'], true); + $pro_item['goods_name'] = $pro_item['cart_info']['product']['store_name']; + $pro_item['goods_unit'] = $pro_item['cart_info']['product']['unit_name']; + $pro_item['goods_image'] = $pro_item['cart_info']['product']['image']; + $pro_item['goods_price'] = $pro_item['cart_info']['product']['price']; + unset($pro_item['cart_info']); + return $pro_item; + }); + + return ['basic'=>$basic,'goods'=>$goods]; + } } \ No newline at end of file diff --git a/app/common.php b/app/common.php index 5bff3f7d..13522c9e 100755 --- a/app/common.php +++ b/app/common.php @@ -368,3 +368,27 @@ function checkDateIsValid($date, $formats = array("Y-m-d")) { } return false; } + +function timediff($begin_time,$end_time) +{ + if($begin_time < $end_time){ + $starttime = $begin_time; + $endtime = $end_time; + }else{ + $starttime = $end_time; + $endtime = $begin_time; + } + //计算天数 + $timediff = $endtime-$starttime; + $days = intval($timediff/86400); + //计算小时数 + $remain = $timediff%86400; + $hours = intval($remain/3600); + //计算分钟数 + $remain = $remain%3600; + $mins = intval($remain/60); + //计算秒数 + $secs = $remain%60; + return array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs); +} +