From a0d6ad35e9f763ff155ce04b0ac26fa2b7472611 Mon Sep 17 00:00:00 2001 From: hant Date: Thu, 26 Jun 2025 23:01:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/AutoDispatchLogic.php | 3 +-- application/admin/controller/Order.php | 22 +++++++-------- .../admin/controller/orders/DispatchLogic.php | 20 +++++++++++++- .../admin/controller/workers/Worker.php | 27 ++++++++++++++++--- 4 files changed, 52 insertions(+), 20 deletions(-) diff --git a/application/admin/controller/AutoDispatchLogic.php b/application/admin/controller/AutoDispatchLogic.php index 54fb1e8..24beb24 100644 --- a/application/admin/controller/AutoDispatchLogic.php +++ b/application/admin/controller/AutoDispatchLogic.php @@ -28,12 +28,11 @@ class AutoDispatchLogic 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_diff($res_worker,$dispatch_admin)); + $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))); diff --git a/application/admin/controller/Order.php b/application/admin/controller/Order.php index 22a535b..de93262 100644 --- a/application/admin/controller/Order.php +++ b/application/admin/controller/Order.php @@ -5,6 +5,7 @@ namespace app\admin\controller; use app\admin\addresmart\Address; use app\admin\controller\orders\DispatchLogic; use app\admin\model\Admin; +use app\admin\model\AuthGroupAccess; use app\admin\model\Item; use app\admin\model\Message; use app\admin\model\order\Invoice; @@ -156,8 +157,6 @@ class Order extends Backend return $this->selectpage(); } - $type = request()->get('type', 1); - [$where, $sort, $order, $offset, $limit] = $this->buildparams(); $build = $this->model ->field(['id', 'order_no', 'admin_id', 'customer', 'tel', 'status', 'area_id', 'address', @@ -203,15 +202,6 @@ class Order extends Backend } - if ($type == 1) { - $build->where('status', '>=', 0); - } elseif ($type == 2) { - $build->where('status', '<', 0); - } elseif ($type == 3) { - $build->where('status', '>=', \app\admin\model\Order::STATUS_DISPATCHING) - ->where('create_time', '<=', (new Carbon())->subMinutes(20) - ->format('Y-m-d H:i:s')); - } if ($group == 2 ) { $build->where('admin_id',$user->id); }elseif ($group == 6){ @@ -564,8 +554,14 @@ class Order extends Backend $res = Admin::where('area_ids', 'like', '%' . $area_id . '%') ->column('id'); - $message = $params['detail'] ?? ''; + $dispatch_admin = AuthGroupAccess::where('group_id', 6) + ->column('uid'); + $res = array_values(array_intersect($res,$dispatch_admin)); + + $message = $params['detail'] ?? ''; + $abnormals = model('abnormal')->where('type', 3) + ->where('id',$params['abnormal_id'])->find(); $insert = []; foreach ($res as $re) { @@ -573,7 +569,7 @@ class Order extends Backend 'to_id' => $re, 'type' => 1, 'title' => '订单内容变更', - 'content' => '【订单内容变更】您有一条订单信息被修改,修改内容为:【' . $message . '】,请注意查收。' + 'content' => '【订单内容变更】您有一条订单'.$order->order_no.'信息被修改,异常类型【'.$abnormals->title.'】,备注:【' . $message . '】,请注意查收。' ]; } $build = new Message(); diff --git a/application/admin/controller/orders/DispatchLogic.php b/application/admin/controller/orders/DispatchLogic.php index 30b00d8..471f39e 100644 --- a/application/admin/controller/orders/DispatchLogic.php +++ b/application/admin/controller/orders/DispatchLogic.php @@ -38,9 +38,12 @@ ORDER BY distance;",[$order->lng,$order->lat]); $worker_ids = array_column($worker_info,'id'); + $items = model('item')->getAll(); + $ids = $this->getParentIdsFromArray($order->item_id,$items); + $worker_items_ids = (new WorkerItem()) - ->where('item_id', $order->item_id) + ->whereIn('item_id', $ids) ->whereIn('worker_id', $worker_ids) ->column('worker_id'); @@ -312,4 +315,19 @@ ORDER BY distance;",[$order->lng,$order->lat]); } return $val; } + + function getParentIdsFromArray($id, $items) { + $map = []; + foreach ($items as $item) { + $map[$item['id']] = $item['pid']; + } + + $result = []; + while (isset($map[$id]) && $map[$id] != 0) { + $id = $map[$id]; + $result[] = $id; + } + + return $result; + } } diff --git a/application/admin/controller/workers/Worker.php b/application/admin/controller/workers/Worker.php index b2428dd..62fccfc 100644 --- a/application/admin/controller/workers/Worker.php +++ b/application/admin/controller/workers/Worker.php @@ -27,7 +27,7 @@ class Worker extends Backend * Worker模型对象 * @var \app\admin\model\Worker */ - protected $model = null; + protected $model = null,$items; public function _initialize() { @@ -37,7 +37,7 @@ class Worker extends Backend $items = model('item')->getAll(); - + $this->items = $items; Tree::instance()->init($items)->icon = ['    ', '    ', '    ']; // dd($ruleList); $res = Tree::instance()->getTreeList(Tree::instance()->getTreeArray(0), 'title'); @@ -304,7 +304,9 @@ class Worker extends Backend $build->where('area_id', 'like', $code . '%'); } if ($item_id) { - $worker_ids = WorkerItem::where('item_id',$item_id)->column('worker_id'); + $ids = $this->getParentIdsFromArray($item_id,$this->items); + + $worker_ids = WorkerItem::whereIn('item_id',$ids)->column('worker_id'); $build->whereIn('id',$worker_ids); } $list = $build @@ -315,6 +317,20 @@ class Worker extends Backend } + function getParentIdsFromArray($id, $items) { + $map = []; + foreach ($items as $item) { + $map[$item['id']] = $item['pid']; + } + + $result = []; + while (isset($map[$id]) && $map[$id] != 0) { + $id = $map[$id]; + $result[] = $id; + } + + return $result; + } public function dispatchMapList() @@ -342,8 +358,11 @@ ORDER BY distance;",[$order->lng,$order->lat]); $worker_ids = array_column($worker_distance,'id'); + + $ids = $this->getParentIdsFromArray($order->item_id,$this->items); + $worker_items_ids = (new WorkerItem()) - ->where('item_id', $order->item_id) + ->whereIn('item_id', $ids) ->whereIn('worker_id', $worker_ids) ->column('worker_id');