From 5dbcd4999dd41aaab7e9238097cf18ffab254ece Mon Sep 17 00:00:00 2001 From: sa0ChunLuyu Date: Fri, 31 Jul 2026 00:08:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=91=E5=AE=A4=E8=A7=84=E5=88=99=E9=9A=94?= =?UTF-8?q?=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/Admin/YeWu/CheckItemController.php | 15 +-- .../Services/Admin/YeWu/CheckItemService.php | 100 +++++++++++++++--- 2 files changed, 97 insertions(+), 18 deletions(-) diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php index 248c835..34ab035 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php @@ -175,28 +175,31 @@ public function GetHuChiList() } - public function GetRules() + public function GetRules(Request $request) { $item_id = request('item_id'); + $userid = $request->get('userid'); if (!$item_id) return \Yz::echoError1('item_id不能为空'); $s = new CheckItemService; - return $s->GetRules($item_id); + return $s->GetRules($item_id, $userid); } - public function SaveRules() + public function SaveRules(Request $request) { $item_id = request('item_id'); $rules = request('rules'); + $userid = $request->get('userid'); if (!$item_id) return \Yz::echoError1('item_id不能为空'); $s = new CheckItemService; - return $s->SaveRules($item_id, $rules); + return $s->SaveRules($item_id, $rules, $userid); } - public function GetItemRelatedResources() + public function GetItemRelatedResources(Request $request) { $item_id = request('item_id'); + $userid = $request->get('userid'); if (!$item_id) return \Yz::echoError1('item_id不能为空'); $s = new CheckItemService; - return $s->GetItemRelatedResources($item_id); + return $s->GetItemRelatedResources($item_id, $userid); } } diff --git a/Laravel/app/Services/Admin/YeWu/CheckItemService.php b/Laravel/app/Services/Admin/YeWu/CheckItemService.php index 5422bde..fe3d0fe 100644 --- a/Laravel/app/Services/Admin/YeWu/CheckItemService.php +++ b/Laravel/app/Services/Admin/YeWu/CheckItemService.php @@ -254,25 +254,95 @@ public function BatchUpdateNotice($item_ids, $field, $value) return \Yz::Return(true, '批量更新成功,共更新' . $updated . '条'); } - public function GetRules($item_id) + public function GetRules($item_id, $userid) { + $user = DB::table('users')->where('id', $userid)->first(); + $rules = DB::table('s_check_item_rule') ->where(['target_type' => 'ITEM', 'target_id' => $item_id, 'deleted' => 0, 'status' => 1]) ->get(); + + if ($user && $user->department_id) { + // 有科室归属:获取用户科室下的所有排班资源 ID + $deptResourceIds = DB::table('s_department_resources') + ->where('department_id', $user->department_id) + ->where('is_del', 0) + ->pluck('id') + ->toArray(); + + $filtered = []; + foreach ($rules as $rule) { + $rule->rule_value = json_decode($rule->rule_value, true); + $resourcesId = $rule->rule_value['resources_id'] ?? null; + + // 全局规则:resources_id 为空/0 → 保留 + if (empty($resourcesId)) { + $filtered[] = $rule; + continue; + } + + // 排班资源属于当前用户科室 → 保留 + if (in_array($resourcesId, $deptResourceIds)) { + $filtered[] = $rule; + } + // 其他科室的规则 → 过滤掉 + } + return \Yz::Return(true, '查询成功', $filtered); + } + + // admin 或无科室:返回全部规则 foreach ($rules as $rule) { $rule->rule_value = json_decode($rule->rule_value, true); } return \Yz::Return(true, '查询成功', $rules); } - public function SaveRules($item_id, $rules) + public function SaveRules($item_id, $rules, $userid) { + $user = DB::table('users')->where('id', $userid)->first(); + + $now = date('Y-m-d H:i:s'); + DB::beginTransaction(); try { - DB::table('s_check_item_rule') - ->where(['target_type' => 'ITEM', 'target_id' => $item_id]) - ->delete(); + if ($user && $user->department_id) { + // 科室用户:获取当前科室的排班资源 ID 列表 + $deptResourceIds = DB::table('s_department_resources') + ->where('department_id', $user->department_id) + ->where('is_del', 0) + ->pluck('id') + ->toArray(); + + // 软删除:只删除全局规则 + 当前科室的规则,不碰其他科室 + DB::table('s_check_item_rule') + ->where(['target_type' => 'ITEM', 'target_id' => $item_id]) + ->where('deleted', 0) + ->where(function($q) use ($deptResourceIds) { + $q->whereRaw('JSON_UNQUOTE(JSON_EXTRACT(rule_value, \'$.resources_id\')) IS NULL') + ->orWhereRaw('JSON_UNQUOTE(JSON_EXTRACT(rule_value, \'$.resources_id\')) = \'\'') + ->orWhereRaw('JSON_UNQUOTE(JSON_EXTRACT(rule_value, \'$.resources_id\')) = \'0\''); + foreach ($deptResourceIds as $id) { + $q->orWhereRaw('JSON_UNQUOTE(JSON_EXTRACT(rule_value, \'$.resources_id\')) = ?', [(string)$id]); + } + }) + ->update(['deleted' => 1, 'updated_at' => $now]); + + // 过滤传入的规则:忽略其他科室的 + if (!empty($rules)) { + $rules = array_values(array_filter($rules, function($rule) use ($deptResourceIds) { + $resourcesId = $rule['rule_value']['resources_id'] ?? null; + return empty($resourcesId) || in_array($resourcesId, $deptResourceIds); + })); + } + } else { + // admin:软删除该项目的全部规则 + DB::table('s_check_item_rule') + ->where(['target_type' => 'ITEM', 'target_id' => $item_id]) + ->where('deleted', 0) + ->update(['deleted' => 1, 'updated_at' => $now]); + } + // 插入新规则 if (!empty($rules)) { $insertData = []; foreach ($rules as $rule) { @@ -287,8 +357,8 @@ public function SaveRules($item_id, $rules) 'rule_value' => $rule_value, 'status' => 1, 'deleted' => 0, - 'created_at' => date('Y-m-d H:i:s'), - 'updated_at' => date('Y-m-d H:i:s'), + 'created_at' => $now, + 'updated_at' => $now, ]; } DB::table('s_check_item_rule')->insert($insertData); @@ -303,9 +373,11 @@ public function SaveRules($item_id, $rules) } //获取检查项目关联的排班资源列表 - public function GetItemRelatedResources($item_id) + public function GetItemRelatedResources($item_id, $userid) { - $resources = DB::table('s_check_item_device') + $user = DB::table('users')->where('id', $userid)->first(); + + $query = DB::table('s_check_item_device') ->join('s_devices', 's_check_item_device.device_id', '=', 's_devices.id') ->join('s_department_resources_device', 's_devices.id', '=', 's_department_resources_device.device_id') ->join('s_department_resources', 's_department_resources_device.rsourece_id', '=', 's_department_resources.id') @@ -317,9 +389,13 @@ public function GetItemRelatedResources($item_id) ) ->where('s_check_item_device.item_id', $item_id) ->where('s_department_resources.is_del', 0) - ->where('s_department_resources.department_resources_status', 1) - ->distinct() - ->get(); + ->where('s_department_resources.department_resources_status', 1); + + if ($user && $user->department_id) { + $query->where('s_department_resources.department_id', $user->department_id); + } + + $resources = $query->distinct()->get(); return \Yz::Return(true, '查询成功', $resources); }