119 lines
5.7 KiB
PHP
119 lines
5.7 KiB
PHP
<?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();
|
|
|
|
return app('json')->success($topCourier);
|
|
|
|
}
|
|
} |