bool, 'msg'=>string] */ public function checkAppointmentPermission($channelId, $patientIdCardNo) { // 1. 检查黑名单功能是否启用 $config = DB::table('sys_config') ->where('config_key', 'block_list_config') ->where('deleted', 0) ->where('status', 1) ->first(); // 如果功能未启用,直接返回允许 if (!$config) { return ['status' => true, 'msg' => '']; } // 2. 查询患者的生效中黑名单记录 $blockList = DB::table('blocklist') ->where('patient_id_card_no', $patientIdCardNo) ->where('status', 1) ->where('deleted', 0) ->where(function ($query) { $query->whereNull('end_time') ->orWhere('end_time', '>', date('Y-m-d H:i:s')); }) ->get(); // 如果没有生效中的黑名单记录,允许预约 if ($blockList->isEmpty()) { return ['status' => true, 'msg' => '']; } // 3. 解析黑名单配置 $configValue = json_decode($config->config_value, true); if (!is_array($configValue) || empty($configValue)) { // 配置为空,不限制 return ['status' => true, 'msg' => '']; } // 4. 检查每个黑名单类型的渠道限制 $blockedTypes = []; foreach ($blockList as $block) { $blockType = $block->block_type; // 查找该黑名单类型的配置 $typeConfig = null; foreach ($configValue as $item) { if (isset($item['type']) && $item['type'] == $blockType) { $typeConfig = $item; break; } } // 如果该类型有配置且包含当前渠道,则被限制 if ($typeConfig && isset($typeConfig['disabled_channel']) && is_array($typeConfig['disabled_channel'])) { if (in_array((string)$channelId, $typeConfig['disabled_channel'])) { $blockedTypes[] = $blockType; } } } // 如果有任何类型限制了该渠道,返回不允许 if (!empty($blockedTypes)) { return ['status' => false, 'msg' => '患者被限制在该渠道预约']; } // 所有类型都没有限制该渠道,允许预约 return ['status' => true, 'msg' => '']; } }