From c4610806ad21aeaf4944e07ccd8e7bf087237936 Mon Sep 17 00:00:00 2001 From: xman <1946321327@qq.com> Date: Wed, 23 Apr 2025 15:36:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BE=E5=8D=95=E5=91=98=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/statistics/Dispatcher.php | 99 +++++--- .../view/statistics/dispatcher/index.html | 80 ++++--- .../js/backend/statistics/dispatcher.js | 219 ++++++++++++------ 3 files changed, 264 insertions(+), 134 deletions(-) diff --git a/application/admin/controller/statistics/Dispatcher.php b/application/admin/controller/statistics/Dispatcher.php index b09288b..792b431 100644 --- a/application/admin/controller/statistics/Dispatcher.php +++ b/application/admin/controller/statistics/Dispatcher.php @@ -2,10 +2,12 @@ namespace app\admin\controller\statistics; +use app\admin\model\Admin; use app\admin\model\Order; use app\common\controller\Backend; use think\exception\DbException; use think\response\Json; +use function Symfony\Component\Clock\now; /** * 订单列管理 @@ -46,32 +48,53 @@ class Dispatcher extends Backend */ public function index() { - - - $this->chart(); + //$this->chart(); + $today = now()->format('Y-m-d'); + $today_end = now()->format('Y-m-d'); //设置过滤方法 $this->request->filter(['strip_tags', 'trim']); if (false === $this->request->isAjax()) { + $this->assign('daterange',$today.' - '.$today_end); + return $this->view->fetch(); } - //如果发送的来源是 Selectpage,则转发到 Selectpage - if ($this->request->request('keyField')) { - return $this->selectpage(); + return json([]); + } + + + public function chartData() + { + $data = $this->chart(); + + $newData = [ + ['派单员','总业绩(¥)','转化率(%)','利润率(%)','变现值'] + ]; + foreach ($data as $datum){ + $newData[] = [ + $datum['admin_user'], + $datum['performance'], + $datum['trans_rate'], + $datum['performance_rate'], + $datum['cash_value'], + ]; } - [$where, $sort, $order, $offset, $limit] = $this->buildparams(); - $list = $this->model - ->where($where) - ->order($sort, $order) - ->paginate($limit); - $result = ['total' => $list->total(), 'rows' => $list->items()]; - return json($result); + return $newData; } //图表统计 public function chart(){ + $filter = $this->request->post(); + if(!empty($filter['daterange'])){ + $arr = explode(' - ',$filter['daterange']); + if(trim($arr[0])){ + $filter['start_time'] = trim($arr[0]); + } + if(trim($arr[1])){ + $filter['end_time'] = trim($arr[1]).' 23:59:59'; + } + } - $filter = $this->request->param('filter/a',[]); $orderValid = implode(',',$this->model->tabStatus(Order::TAB_VALID)); @@ -106,9 +129,8 @@ class Dispatcher extends Backend }else{ //按录单时间 $time_field = 'create_time'; } - $builder->whereBetween($time_field,$filter['start_time'],$filter['end_time']); + $builder->whereBetween($time_field,[$filter['start_time'],$filter['end_time']]); } - //城市 if(!empty($filter['area_id'])){ $builder->where('area_id',$filter['area_id']); @@ -121,22 +143,31 @@ class Dispatcher extends Backend $newData = []; - foreach ($data as $datum){ - //利润率 = 总业绩/总成效额 - $datum->performance_rate = $this->_calc($datum->performance,$datum->total); - //转化率 = 完单数 / 总订单数 - $datum->trans_rate = $this->_calc($datum->finish_num,$datum->count_num); - //变现值 = 总业绩 / 总订单数 - $datum->cash_value = $this->_calc($datum->performance,$datum->count_num,2); - //客单利润 = 总利润 / 完单数 - $datum->performance_avg = $this->_calc($datum->performance,$datum->finish_num,2); - //客单价 = 总成效额 / 完单数 - $datum->total_avg = $this->_calc($datum->total,$datum->finish_num,2); - $newData[] = $datum->toArray(); + if(!empty($data)){ + foreach ($data as $datum){ + //利润率 = 总业绩/总成效额 + $datum->performance_rate = $this->_calc($datum->performance,$datum->total,4,true); + //转化率 = 完单数 / 总订单数 + $datum->trans_rate = $this->_calc($datum->finish_num,$datum->count_num,4,true); + //变现值 = 总业绩 / 总订单数 + $datum->cash_value = $this->_calc($datum->performance,$datum->count_num,2); + //客单利润 = 总利润 / 完单数 + $datum->performance_avg = $this->_calc($datum->performance,$datum->finish_num,2); + //客单价 = 总成效额 / 完单数 + $datum->total_avg = $this->_calc($datum->total,$datum->finish_num,2); + + $datum->admin_user = Admin::where($datum->dispatch_admin_id)->value('nickname')??'未知'; + + $newData[] = $datum->toArray(); + } } - dump($newData);exit; + + + + return $newData; + //dump($newData);exit; } @@ -146,8 +177,14 @@ class Dispatcher extends Backend * @param $scale * @return int|string */ - private function _calc($a,$b,$scale=4){ - return $b > 0 ? bcdiv($a,$b,$scale) : 0; + private function _calc($a,$b,$scale=4,$is_percent=false){ + $val = $b > 0 ? bcdiv($a,$b,$scale) : 0; + + if($is_percent){ + + return bcmul($val,100,2); + } + return $val; } } diff --git a/application/admin/view/statistics/dispatcher/index.html b/application/admin/view/statistics/dispatcher/index.html index 25676e8..1e86817 100644 --- a/application/admin/view/statistics/dispatcher/index.html +++ b/application/admin/view/statistics/dispatcher/index.html @@ -1,46 +1,66 @@