124 lines
6.2 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\controller\api\dataview;
use app\common\model\Company;
use app\common\repositories\BaseRepository;
use crmeb\basic\BaseController;
use think\App;
use think\exception\ValidateException;
use think\facade\Db;
class Logistics extends BaseController
{
public function __construct(App $app, BaseRepository $repository)
{
parent::__construct($app);
$this->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()
{
// 镇区域码为空,查区县的公司
if (empty($this->streetCode)) {
$companyList = Db::connect('work_task')->name('company')->where('area', $this->areaCode)->select()->toArray();
} else {
$companyList = Db::connect('work_task')->name('company')->where('street', $this->streetCode)->select()->toArray();
}
$companyIds = array_column($companyList, 'id');
// 查镇车辆列表
$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 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()
{
// 查询镇辖区内配送订单最多的配送员
// 先从供销系统 查出镇下边的所有配送员-小组服务公司的负责人
$serviceGroupCompanyIds = Db::connect('work_task')->name('company')
->where(['street'=> $this->streetCode, 'company_type'=>18])
->column('id');
$userIdList = Db::connect('work_task')->name('user')
->whereIn('company_id', $serviceGroupCompanyIds)
->where(['group_id'=>5])
->column('id');
// 从物流系统 查物流订单排序 确定谁是 镇辖区内配送订单最多的配送员
$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();
// 返查配送员的物流配送订单统计信息
// 待取货数
$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);
}
}