allocatr/application/admin/controller/AutoDispatchLogic.php
2025-06-26 23:01:53 +08:00

102 lines
3.4 KiB
PHP

<?php
namespace app\admin\controller;
use app\admin\controller\orders\DispatchLogic;
use app\admin\model\Admin;
use app\admin\model\AuthGroupAccess;
use app\admin\model\Message;
use app\admin\model\OrderDispatch;
use app\admin\model\Worker;
use think\Hook;
class AutoDispatchLogic
{
public static function autoDispatch($order, $auth = null, $isRetry = false)
{
//
// if ($order->dispatch_type != 2) {
// return false;
// }
$worker_id = (new DispatchLogic())->getMaxScoreWorker($order);
// dd($worker_id);
if (!$worker_id) {
$area_id = substr($order->area_id, 0, 4);
$res_worker = Admin::where('area_ids', 'like', '%' . $area_id . '%')
->column('id');
$dispatch_admin = AuthGroupAccess::where('group_id', 6)
->column('uid');
$res_worker = array_values(array_intersect($res_worker,$dispatch_admin));
$res_admin = AuthGroupAccess::whereIn('group_id', [1,11])
->column('uid');
$res = array_values(array_unique(array_merge($res_worker,$res_admin)));
$insert = [];
foreach ($res as $re) {
$insert [] = [
'to_id' => $re,
'type' => 1,
'title' => '派单通知',
'content' => '【派单通知】您有一条订单号为' . $order->order_no . '的新订单,请立即派单!'
];
}
$build = new Message();
$build->saveAll($insert);
$order->dispatch_type = 1;
$order->save();
return false;
}
$admin = Admin::where('id', config('system_id'))->find();
$insert = [
'admin_id' => $admin->id,
'admin_user' => $admin->nickname,
'order_id' => $order->id,
'type' => 2,
'worker_id' => $worker_id,
'plan_time' => $order->plan_time ?? null,
'is_receipt' => $order->receive_type == 1,
];
$worker = (new Worker())->where('id', $worker_id)->find();
$insert ['worker_name'] = $worker['name'];
$insert ['worker_tel'] = $worker['tel'];
$insert['follow'] = 1;
$orderDispatch = new OrderDispatch();
$res = $orderDispatch->allowField(true)->save($insert);
$order->status = \app\admin\model\Order::STATUS_DISPATCHED;
$order->dispatch_time = date('Y-m-d H:i:s');
$order->dispatch_admin_id = $admin->id;
$order->dispatch_admin_user = $admin->nickname;
$order->worker_id = $worker_id;
$order->dispatch_type = 2;
$order->save();
//日志
$hookparams['order'] = $order;
$hookparams['role'] = 1;
$hookparams['auth'] = null;
$hookparams['remark'] = '自动完成派单';//. $worker->name.'('.$worker->tel.')';
/*if ($isRetry) {
$hookparams['remark'] = '订单重派:工程师【'.$worker->name.'】超时不接单,系统自动转派订单';
}*/
Hook::listen('order_change', $hookparams);
//日志
$hookParams = [
'dispatch' => (new OrderDispatch())->where('id', $orderDispatch->id)->find(),
'remark' => '自动派单给工程师:' . $worker->name . '(' . $worker->tel . ')',
];
Hook::listen('order_dispatch_change', $hookParams);
return true;
}
}