This commit is contained in:
xman 2025-04-22 18:13:43 +08:00
parent dc7cb57adf
commit 490e1232f0
4 changed files with 72 additions and 9 deletions

View File

@ -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]);

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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;