统计
This commit is contained in:
parent
dc7cb57adf
commit
490e1232f0
|
|
@ -259,7 +259,16 @@ class Dispatch2 extends Backend
|
|||
$params['status'] = OrderDispatch::STATUS_FINISH;
|
||||
$params['finish_time'] = date('Y-m-d H:i:s');
|
||||
$params['follow'] = 2;
|
||||
|
||||
if($row->admin_id == 0){
|
||||
$params['admin_id'] = $this->auth->id;
|
||||
$params['admin_user'] = $this->auth->admin_user;
|
||||
$order->dispatch_admin_id = $this->auth->id;
|
||||
$order->save();
|
||||
}
|
||||
|
||||
$result = $row->allowField(true)->save($params);
|
||||
|
||||
//修改订单状态
|
||||
$OrderLogic = new OrderLogic();
|
||||
$OrderLogic -> dispachFinishAfter($row,['role'=>1,'auth'=>$this->auth,'remark'=>'后台完成任务,操作人:'.$this->auth->nickname]);
|
||||
|
|
|
|||
|
|
@ -82,18 +82,72 @@ class Dispatcher extends Backend
|
|||
"COUNT(CASE WHEN status IN (".$orderValid.") THEN 1 END) AS count_num", //总订单数 (排除取消 和草稿)
|
||||
"SUM(CASE WHEN status = 60 THEN total END) AS total", //成效额
|
||||
"SUM(CASE WHEN status = 60 THEN total END) AS performance", //业绩
|
||||
|
||||
"SUM(CASE WHEN status = 60 THEN (cost + material_cost) END) AS cost_total", //总成本
|
||||
|
||||
"SUM(CASE WHEN status = 60 THEN (refund_amount + worker_refund_amount) END) AS refund_total", //退款总数
|
||||
"COUNT(CASE WHEN refund_amount > 0 OR worker_refund_amount > 0 THEN 1 END) AS refund_count", //退款订单数量
|
||||
"AVG(CASE WHEN status > 10 THEN UNIX_TIMESTAMP(dispatch_time) - UNIX_TIMESTAMP(create_time) END) AS avg_time_diff", //派单时效
|
||||
// "SUM(CASE WHEN status = 60 THEN (field1 + field2) END) AS performance",
|
||||
];
|
||||
|
||||
$data = $this->model
|
||||
->field($fields)
|
||||
->group('dispatch_admin_id')
|
||||
->select();
|
||||
dump($data);exit;
|
||||
$builder = $this->model
|
||||
->field($fields);
|
||||
//->where('dispatch_admin_id','>',0);
|
||||
|
||||
if(!empty($filter['admin_id'])){
|
||||
$builder->where('dispatch_admin_id',$filter['admin_id']);
|
||||
}
|
||||
|
||||
if(!empty($filter['start_time']) && !empty($filter['end_time'])){
|
||||
$time_by = $filter['time_by'] ??1;
|
||||
if($time_by == 1){ //按派单时间
|
||||
$time_field = 'dispatch_time';
|
||||
}else{ //按录单时间
|
||||
$time_field = 'create_time';
|
||||
}
|
||||
$builder->whereBetween($time_field,$filter['start_time'],$filter['end_time']);
|
||||
}
|
||||
|
||||
//城市
|
||||
if(!empty($filter['area_id'])){
|
||||
$builder->where('area_id',$filter['area_id']);
|
||||
}
|
||||
//项目
|
||||
if(!empty($filter['item_id'])){
|
||||
$builder->where('item_id',$filter['item_id']);
|
||||
}
|
||||
$data = $builder->group('dispatch_admin_id')->select();
|
||||
|
||||
$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();
|
||||
}
|
||||
|
||||
dump($newData);exit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $a
|
||||
* @param $b
|
||||
* @param $scale
|
||||
* @return int|string
|
||||
*/
|
||||
private function _calc($a,$b,$scale=4){
|
||||
return $b > 0 ? bcdiv($a,$b,$scale) : 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ class OrderDispatch extends Model
|
|||
public function scopeAuth($query, Auth $auth, string $admin_id_field='admin_id'){
|
||||
|
||||
if(!$auth->isSuperAdmin()){
|
||||
$query->where('fa_order_dispatch.'.$admin_id_field,$auth->id);
|
||||
$query->whereIn('fa_order_dispatch.'.$admin_id_field,[$auth->id,0]);
|
||||
}
|
||||
return $query;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ class OrderLogic
|
|||
* @param Dispatch $dispatch
|
||||
* @return void
|
||||
*/
|
||||
public function cancelOrderDispatch(OrderDispatch $dispatch,$auth=null,$remark='',$cancelOrder=true)
|
||||
public function cancelOrderDispatch(OrderDispatch $dispatch,$auth=null,$remark='',$nocancelOrder=true)
|
||||
{
|
||||
//取消
|
||||
$dispatch->allowField(true)->save(['status' => OrderDispatch::STATUS_CANCEL, 'follow'=>0,'remark' => $remark]);
|
||||
|
|
@ -128,14 +128,14 @@ class OrderLogic
|
|||
Hook::listen('order_dispatch_change', $hookParams);
|
||||
|
||||
|
||||
if($cancelOrder){
|
||||
if($nocancelOrder){
|
||||
$order = Order::where('id',$dispatch->order_id)->where('status',Order::STATUS_DISPATCHED)->find();
|
||||
if(empty($order)){
|
||||
throw new Exception('未找到关联订单');
|
||||
}
|
||||
//回退订单状态
|
||||
$order->status = Order::STATUS_DISPATCHING;
|
||||
|
||||
$order->save();
|
||||
$params['order'] = $order;
|
||||
$params['role'] = 1;
|
||||
$params['auth'] = $auth;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user