repository = $repository; $this->areaCode = $this->request->param('areaCode', ''); $this->streetCode = $this->request->param('streetCode', ''); if ($this->areaCode == '' && $this->streetCode == '') { throw new ValidateException('请选择地区'); } } // 三轮车列表 每个乡镇订单最多的配送员的三轮车 public function vehicleList() { // 查区县的镇农科公司 $list = []; $companyList = Db::connect('work_task')->name('company')->where('id', 69)->where(['area' => $this->areaCode, 'company_type'=>41])->select()->toArray(); foreach ($companyList as $company) { // 先从供销系统 查出镇下边的所有配送员-小组服务公司的负责人 $serviceGroupCompanyIds = Db::connect('work_task')->name('company') ->where(['street'=> $company['street'], 'company_type'=>18]) ->column('id'); if (empty($serviceGroupCompanyIds)) { continue; } $userIdList = Db::connect('work_task')->name('user') ->whereIn('company_id', $serviceGroupCompanyIds) ->where(['group_id'=>5]) ->field('id, nickname')->select()->toArray(); if (empty($userIdList)) { continue; } // 从物流系统 查物流订单排序 确定谁是 镇辖区内配送订单最多的配送员 $topCourier = Db::connect('logistics')->name('logistics') ->field(['courier_id','courier_name','COUNT(order_id) AS order_count']) ->whereIn('courier_id', array_column($userIdList, 'id')) ->group('courier_id') ->order('order_count DESC') ->find(); if (!empty($userIdList) && empty($topCourier)) { $topCourier['courier_id'] = $userIdList[0]['id']; $topCourier['courier_name'] = $userIdList[0]['nickname']; $topCourier['order_count'] = 0; } // 小组公司没有配送员或是没有三轮车 if (empty($topCourier)) { continue; } // 三轮车车牌号 根据配送员id反查公司id,公司id反查车牌号 $courier = Db::connect('work_task')->name('user')->where(['id'=>$topCourier['courier_id']])->find(); if (empty($courier)) { continue; } $vehicleRent = Db::connect('work_task')->name('vehicle_rent')->where(['rent_company_id'=>$courier['company_id']])->find(); if (empty($vehicleRent)) { continue; } $topCourier['id'] = $vehicleRent['car_id']; $topCourier['license'] = $vehicleRent['car_license']; $topCourier['area_code'] = $courier['area']; $topCourier['street_code'] = $courier['street']; $list[] = $topCourier; } // 查镇车辆列表 // $list = Db::connect('work_task')->name('vehicle_rent') // ->field('company_id, car_id as id, car_license as license') // ->append(['area_code','street_code']) // ->whereIn('company_id', $companyIds) // ->where('status','in','0,1,2') // ->withAttr('area_code', function ($value, $data){ // $company = Db::connect('work_task')->name('company')->where('id', $data['company_id'])->find(); // return $company['area']; // }) // ->withAttr('street_code', function ($value, $data){ // $company = Db::connect('work_task')->name('company')->where('id', $data['company_id'])->find(); // return $company['street']; // }) // ->group('company_id') // ->select()->toArray(); $count = count($list); return app('json')->success(compact('count', 'list')); } // 三轮车订单排行榜 public function vehicleOrderRanking() { // 查区县的镇农科公司 $list = []; // 先从供销系统 查出镇下边的所有配送员-小组服务公司的负责人 $serviceGroupCompanyIds = Db::connect('work_task')->name('company') ->where(['area'=> $this->areaCode, 'company_type'=>18]) ->column('id'); if (empty($serviceGroupCompanyIds)) { return app('json')->success($list); } $userIdList = Db::connect('work_task')->name('user') ->whereIn('company_id', $serviceGroupCompanyIds) ->where(['group_id'=>5]) ->field('id, nickname')->select()->toArray(); // 从物流系统 查物流订单排序 $topCourierList = Db::connect('logistics')->name('logistics') ->field(['courier_id','courier_name','COUNT(order_id) AS order_count']) ->whereIn('courier_id', array_column($userIdList, 'id')) ->group('courier_id') ->order('order_count DESC') ->select(); foreach ($topCourierList as $topCourier) { // 三轮车车牌号 根据配送员id反查公司id,公司id反查车牌号 $courier = Db::connect('work_task')->name('user')->where(['id'=>$topCourier['courier_id']])->find(); $vehicleRent = Db::connect('work_task')->name('vehicle_rent')->where(['rent_company_id'=>$courier['company_id']])->find(); if (empty($vehicleRent)) { continue; } $topCourier['id'] = $vehicleRent['car_id']; $topCourier['license'] = $vehicleRent['car_license']; $topCourier['area_code'] = $courier['area']; $topCourier['street_code'] = $courier['street']; $list[] = $topCourier; } return app('json')->success($list); } // 镇级最新物流配送详情 public function latestLogistics() { if ($this->streetCode == '') { return app('json')->fail('未获取到位置信息'); } $detail = Db::name('store_order')->alias('o') ->field(['o.order_sn', 'o.real_name', 'o.user_phone', 'o.user_address', 'o.user_address_code', 'p.store_name', 'm.mer_name', 'o.create_time', 'o.status','m.area_id', 'm.street_id', 'm.village_id', 'm.mer_address', 'm.long as mer_long', 'm.lat as mer_lat']) ->leftJoin('product_order_log og', 'o.order_id = og.order_id') ->leftJoin('merchant m', 'o.mer_id = m.mer_id') ->leftJoin('store_order_product op', 'o.order_id = op.order_id') ->leftJoin('product_library p', 'op.product_id = p.id') ->where('og.street_code', $this->streetCode) ->order('o.order_id', 'desc') ->find(); if (empty($detail)) { return app('json')->success([]); } // 拼接商户的详细地址 area_id street_id village_id $area = Db::name('geo_area')->where('area_code', $detail['area_id'])->find(); $city = Db::name('geo_city')->where('city_code', $area['city_code'])->find(); $province = Db::name('geo_province')->where('province_code', $city['province_code'])->find(); $street = Db::name('geo_street')->where('street_code', $detail['street_id'])->find(); $village = Db::name('geo_village')->where('village_id', $detail['village_id'])->find(); $merAddress = $province['province_name'] . $city['city_name'] . $area['area_name'] . $street['street_name'].$village['village_name'].$detail['mer_address']; $detail['mer_address'] = $merAddress; $detail['status'] = app()->make(Order::class)->getStatusDesc($detail['status']); return app('json')->success($detail); } // 第二页 物流信息统计 public function logisticsCount() { $topCourier = []; // 查询镇辖区内配送订单最多的配送员 // 先从供销系统 查出镇下边的所有配送员-小组服务公司的负责人 $serviceGroupCompanyIds = Db::connect('work_task')->name('company') ->where(['street'=> $this->streetCode, 'company_type'=>18]) ->column('id'); if (empty($serviceGroupCompanyIds)) { return app('json')->success($topCourier); } $userIdList = Db::connect('work_task')->name('user') ->whereIn('company_id', $serviceGroupCompanyIds) ->where(['group_id'=>5]) ->column('id'); if (empty($userIdList)) { return app('json')->success($topCourier); } // 从物流系统 查物流订单排序 确定谁是 镇辖区内配送订单最多的配送员 $topCourier = Db::connect('logistics')->name('logistics') ->field(['courier_id','courier_name','COUNT(order_id) AS order_count']) ->whereIn('courier_id', $userIdList) ->group('courier_id') ->order('order_count DESC') ->find(); if (!empty($userIdList) && empty($topCourier)) { $user = Db::connect('work_task')->name('user')->where('id', $userIdList[0])->find(); $topCourier['courier_id'] = $user['id']; $topCourier['courier_name'] = $user['nickname']; $topCourier['order_count'] = 0; } if (empty($topCourier)) { return app('json')->success($topCourier); } // 返查配送员的物流配送订单统计信息 // 待取货数 $topCourier['pending_order_count'] = Db::connect('logistics')->name('logistics')->where(['status'=>0, 'courier_id'=>$topCourier['courier_id']])->count(); // 配送中数 $topCourier['delivering_order_count'] = Db::connect('logistics')->name('logistics')->where(['status'=>1, 'courier_id'=>$topCourier['courier_id']])->count(); // 已完成数 $topCourier['finished_order_count'] = Db::connect('logistics')->name('logistics')->where([['status', 'in', [2,3]], 'courier_id'=>$topCourier['courier_id']])->count(); // 三轮车车牌号 根据配送员id反查公司id,公司id反查车牌号 $courierCompanyId = Db::connect('work_task')->name('user')->where(['id'=>$topCourier['courier_id']])->value('company_id'); $vehicleRent = Db::connect('work_task')->name('vehicle_rent')->where(['rent_company_id'=>$courierCompanyId])->find(); $topCourier['car_id'] = $vehicleRent['car_id']; $topCourier['car_license'] = $vehicleRent['car_license']; return app('json')->success($topCourier); } // 第二页 地图 最新的10笔配送订单地址 以及最近一次取货地址发散 public function logisticsMapCount() { $courierId = $this->request->param('courier_id'); $latestOrder = []; $latestTenOrder = []; // 最近一次取货地址 最新一笔的配送中订单的取货地址 $latestLogistics = Db::connect('logistics')->name('logistics')->where(['status'=>1, 'courier_id' => $courierId])->order('id', 'desc')->find(); if (empty($latestLogistics)) { return app('json')->success(compact('latestOrder', 'latestTenOrder')); } $latestOrderInfo = Db::name('store_order')->where(['order_id'=>$latestLogistics['order_id']])->find(); $merchant = Db::name('merchant')->where(['mer_id'=>$latestOrderInfo['mer_id']])->find(); // 拼接商户的详细地址 area_id street_id village_id $area = Db::name('geo_area')->where('area_code', $merchant['area_id'])->find(); $city = Db::name('geo_city')->where('city_code', $area['city_code'])->find(); $province = Db::name('geo_province')->where('province_code', $city['province_code'])->find(); $street = Db::name('geo_street')->where('street_code', $merchant['street_id'])->find(); $village = Db::name('geo_village')->where('village_id', $merchant['village_id'])->find(); $merAddress = $province['province_name'] . $city['city_name'] . $area['area_name'] . $street['street_name'].$village['village_name'].$merchant['mer_address']; $latestOrder['mer_address'] = $merAddress; // 最新的10笔订单 $latestTenOrder = Db::connect('logistics')->name('logistics')->field('receiver_address')->where(['status'=>1, 'courier_id' => $courierId])->order('id', 'desc')->limit(10)->select()->toArray(); return app('json')->success(compact('latestOrder', 'latestTenOrder')); } public function logisticsList() { $type = $this->request->param('type'); $courierId = $this->request->param('courier_id'); $startTime = $this->request->param('start_time'); $endTime = $this->request->param('end_time'); $list = []; $count = 0; if ($type == 1) { // 待取货 $list = Db::connect('logistics')->name('logistics')->where(['status'=>0, 'courier_id'=>$courierId])->when($startTime&&$endTime,function ($query) use ($startTime, $endTime){ $query->whereBetween('qh_time', [$startTime, $endTime]); })->select(); $count = Db::connect('logistics')->name('logistics')->where(['status'=>0, 'courier_id'=>$courierId])->when($startTime&&$endTime,function ($query) use ($startTime, $endTime){ $query->whereBetween('qh_time', [$startTime, $endTime]); })->count(); } if ($type == 2) { // 配送中 $list = Db::connect('logistics')->name('logistics')->where(['status'=>1, 'courier_id'=>$courierId])->when($startTime&&$endTime,function ($query) use ($startTime, $endTime){ $query->whereBetween('create_time', [$startTime, $endTime]); })->select(); $count = Db::connect('logistics')->name('logistics')->where(['status'=>1, 'courier_id'=>$courierId])->when($startTime&&$endTime,function ($query) use ($startTime, $endTime){ $query->whereBetween('create_time', [$startTime, $endTime]); })->count(); } if ($type == 3) { // 已完成 $list = Db::connect('logistics')->name('logistics')->where([['status', 'in', [2,3]], 'courier_id'=>$courierId])->when($startTime&&$endTime,function ($query) use ($startTime, $endTime){ $query->whereBetween('ps_time', [$startTime, $endTime]); })->select(); $count = Db::connect('logistics')->name('logistics')->where([['status', 'in', [2,3]], 'courier_id'=>$courierId])->when($startTime&&$endTime,function ($query) use ($startTime, $endTime){ $query->whereBetween('ps_time', [$startTime, $endTime]); })->count(); } $list = $list->toArray(); foreach ($list as &$item) { $item['product_name'] = StoreOrderProduct::alias('o')->join('store_product p', 'o.product_id=p.product_id')->where('o.order_id', $item['order_id'])->value('p.store_name'); } return app('json')->success(compact('count', 'list')); } }