where("jurisdiction_id LIKE '%660%'")->select(); if (empty($groupsWithCashier)) { logMessage("没有找到包含收银机权限的权限组,可能已经被隐藏或不存在"); exit; } logMessage("找到 " . count($groupsWithCashier) . " 个包含收银机权限的权限组"); // 2. 创建备份表 $backupResult = M()->execute("CREATE TABLE IF NOT EXISTS ls_jurisdiction_group_backup_" . date('Ymd_His') . " AS SELECT * FROM ls_jurisdiction_group WHERE jurisdiction_id LIKE '%660%'"); if ($backupResult !== false) { logMessage("权限组备份创建成功"); } else { logMessage("警告:备份创建失败,但继续执行"); } // 3. 开始事务 M()->startTrans(); $updatedCount = 0; // 4. 逐个处理权限组 foreach ($groupsWithCashier as $group) { $oldJurisdiction = $group['jurisdiction_id']; $newJurisdiction = $oldJurisdiction; // 移除660权限ID $newJurisdiction = preg_replace('/^660,/', '', $newJurisdiction); // 开头 $newJurisdiction = preg_replace('/,660$/', '', $newJurisdiction); // 结尾 $newJurisdiction = preg_replace('/,660,/', ',', $newJurisdiction); // 中间 $newJurisdiction = preg_replace('/^660$/', '', $newJurisdiction); // 只有660 if ($newJurisdiction !== $oldJurisdiction) { $updateResult = $JurisdictionGroupModel->where(array('id' => $group['id']))->save(array('jurisdiction_id' => $newJurisdiction)); if ($updateResult !== false) { logMessage("权限组 '{$group['role_name']}' (ID: {$group['id']}) 更新成功"); logMessage(" 原权限: {$oldJurisdiction}"); logMessage(" 新权限: {$newJurisdiction}"); $updatedCount++; } else { throw new Exception("更新权限组 {$group['id']} 失败"); } } } // 5. 提交事务 M()->commit(); logMessage("成功更新了 {$updatedCount} 个权限组"); // 6. 验证结果 $remainingGroups = $JurisdictionGroupModel->where("jurisdiction_id LIKE '%660%'")->select(); if (empty($remainingGroups)) { logMessage("验证成功:所有权限组中的收银机权限已被移除"); logMessage("线下收银功能已成功隐藏"); } else { logMessage("警告:仍有 " . count($remainingGroups) . " 个权限组包含收银机权限"); } // 7. 记录操作日志到系统日志表(如果存在) if ($db->query("SHOW TABLES LIKE 'action_log'")) { $logData = [ 'source' => 0, 'type' => 4, 'request_data' => json_encode(['action' => 'hide_offline_cashier', 'affected_groups' => $updatedCount]), 'desc' => '隐藏线下收银功能', 'add_time' => time() ]; $db->table('action_log')->add($logData); } } catch (Exception $e) { // 回滚事务 M()->rollback(); logMessage("错误:" . $e->getMessage()); logMessage("操作已回滚"); exit(1); } logMessage("操作完成"); // 如果是通过浏览器访问,显示友好的结果页面 if (!empty($_SERVER['HTTP_HOST'])) { echo "

线下收银功能隐藏操作完成

"; echo "

请查看日志文件 hide_cashier_log.txt 获取详细信息

"; echo "

返回

"; } ?>