科室规则隔离

main
鹿和sa0ChunLuyu 5 days ago
parent 91527ebf59
commit 5dbcd4999d

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

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

Loading…
Cancel
Save