102 lines
3.4 KiB
PHP
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;
|
|
|
|
}
|
|
|
|
} |