文件
mashangyoujiu/_ai_archive/scripts/hide_offline_cashier.php

125 行
4.4 KiB
PHP

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
/**
* 隐藏线下收银功能脚本
* 功能:从权限组中移除收银机权限(ID: 660),从而隐藏线下收银功能
* 使用方法:在浏览器中访问此文件或在命令行中执行
*/
// 引入ThinkPHP框架
require_once './index.php';
// 设置错误报告
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 日志记录函数
function logMessage($message) {
$logFile = './hide_cashier_log.txt';
$timestamp = date('Y-m-d H:i:s');
file_put_contents($logFile, "[{$timestamp}] {$message}\n", FILE_APPEND);
echo "[{$timestamp}] {$message}\n";
}
try {
logMessage("开始执行隐藏线下收银功能操作");
// 连接数据库
$db = M();
// 1. 使用ThinkPHP的Model方式操作数据库
$JurisdictionGroupModel = M('jurisdiction_group');
// 首先查询包含收银机权限的权限组
$groupsWithCashier = $JurisdictionGroupModel->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 "<h2>线下收银功能隐藏操作完成</h2>";
echo "<p>请查看日志文件 hide_cashier_log.txt 获取详细信息</p>";
echo "<p><a href='javascript:history.back()'>返回</a></p>";
}
?>