sqlite-web 0.7.2
gitea.db
issue
Create
Query
access
access_token
action
action_artifact
action_run
action_run_index
action_run_job
action_runner
action_runner_token
action_schedule
action_schedule_spec
action_task
action_task_output
action_task_step
action_tasks_version
action_variable
app_state
attachment
auth_token
badge
branch
collaboration
comment
commit_status
commit_status_index
commit_status_summary
commit_sync_log
commit_sync_status
dbfs_data
dbfs_meta
deploy_key
email_address
email_hash
external_login_user
follow
gpg_key
gpg_key_import
hook_task
issue
issue_assignees
issue_content_history
issue_dependency
issue_index
issue_label
issue_pin
issue_user
issue_watch
label
language_stat
lfs_lock
lfs_meta_object
login_source
milestone
mirror
notice
notification
oauth2_application
oauth2_authorization_code
oauth2_grant
org_user
package
package_blob
package_blob_upload
package_cleanup_rule
package_file
package_property
package_version
project
project_board
project_issue
protected_branch
protected_tag
public_key
pull_auto_merge
pull_request
push_mirror
reaction
release
renamed_branch
repo_archiver
repo_hidden_file
repo_indexer_status
repo_license
repo_redirect
repo_topic
repo_transfer
repo_unit
repository
review
review_state
secret
session
sqlite_sequence
star
stopwatch
system_setting
task
team
team_invite
team_repo
team_unit
team_user
topic
tracked_time
two_factor
upload
user
user_badge
user_blocking
user_open_id
user_redirect
user_setting
version
watch
webauthn_credential
webhook
Toggle helper tables
Structure
Content
Query
Insert
Drop
Import
Export
Update row 441 in issue
id
Primary key.
INTEGER NOT NULL
repo_id
INTEGER
index
INTEGER
poster_id
INTEGER
original_author
TEXT
original_author_id
INTEGER
name
🔍 代码审查报告:pay-260616 - 1
TEXT
content
## 自动代码审查报告 **分支**: pay-260616 **提交**: `5d64718097ef068b041584656af3d3a783e63391` **提交人**: LITTLEMAIDI (11833999+littlemaidi@user.noreply.gitee.com) **时间**: 2026-06-01 19:17:49 --- ## 1. 审查摘要 - **代码质量评分**:5.5 / 10 分 - **总体评价**:该模型承载了极其复杂的预订时间计算与状态过滤逻辑,业务覆盖全面,但代码结构严重臃肿。存在明显的状态管理缺陷、硬编码泛滥、方法过长及潜在的性能瓶颈。整体可读性与可维护性较差,需进行系统性重构。 - **风险等级**:🔴 高 ## 2. 问题详情 > 注:因原始代码未提供行号,下表以 `方法名/代码块` 定位。代码末尾存在截断,部分逻辑未完整审查。 | 严重程度 | 文件/行号 | 问题描述 | 建议修改方案 | 代码示例 (可选) | | :--- | :--- | :--- | :--- | :--- | | 🔴 严重 | `get_book_days_info()` 方法内 | `$this->book_days += 1;` 直接修改类属性。若该方法被多次调用,天数会持续累加,导致后续查询范围错误。 | 使用局部变量进行计算,禁止直接修改实例属性。 | `$days = $add_day ? $this->book_days + 1 : $this->book_days;`<br>`for ($i = 0; $i < $days; $i++) { ... }` | | 🔴 严重 | 全局静态属性 `self::$xxx` | 静态缓存变量(如 `self::$book_days_info`)未设置失效机制。在 PHP-FPM 长连接或 CLI 环境下,会导致脏数据跨请求污染,引发严重业务错乱。 | 增加缓存键隔离(如按商户/日期),或在请求生命周期结束/关键节点提供 `clearStaticCache()` 清理方法。 | `public static function clearCache(): void { self::$book_days_info = []; self::$shop_data = []; ... }` | | 🔴 严重 | `get_book_day_time_info()` 内 `array_intersect(...)` | `array_intersect(...array_values($all_room_book_time))` 使用展开运算符。若数组为空或仅含1个元素,PHP 8+ 会抛出 `ArgumentCountError`,PHP 7 行为不可控。 | 增加元素数量判断,安全调用。 | `if (count($all_room_book_time) > 1) { $un_book_time = array_intersect(...array_values($all_room_book_time)); }` | | 🟠 警告 | `get_book_day_time_info()` 方法体 | 方法体超 300 行,嵌套层级深,混合了时间计算、状态过滤、套餐校验、营业时间判断等职责。违反单一职责原则,极易产生边界 Bug。 | 拆分为多个私有方法,如 `calculatePackageAvailability()`, `checkBusinessHoursOverlap()`, `filterUnbookableTimes()`。 | *(见下方重构建议)* | | 🟠 警告 | 全局多处 | 大量使用魔法字符串/数字(如 `'1'`, `'2'`, `'merchantApp'`, `'-1'`, `'7'`),缺乏语义化,后期维护极易出错。 | 提取为类常量,统一状态与场景枚举。 | `const SCENE_KTV = '1'; const SCENE_BILLIARDS = '2'; const STATUS_AVAILABLE = '1'; const STATUS_UNAVAILABLE = '-1';` | | 🟠 警告 | 构造函数 & `set_shop_config()` | `$CI = &get_instance();` 被重复调用 4 次以上;模型/库在构造函数和配置方法中重复加载。增加不必要的开销。 | 在构造函数顶部统一获取实例并赋值给 `$this->ci`;利用 CI 的自动加载或懒加载机制。 | `protected $ci; public function __construct() { parent::__construct(); $this->ci =& get_instance(); }` | | 🟡 建议 | 类属性定义区 | 30+ 个属性全部声明为 `public`,外部可直接篡改内部状态,破坏封装性,且 IDE 无法提供类型提示。 | 改为 `private`/`protected`,按需暴露 `getter/setter`,并补充 PHP 7+ 类型声明。 | `private int $book_room_id = 0; public function getBookRoomId(): int { return $this->book_room_id; }` | | 🟡 建议 | 时间处理逻辑 | 频繁使用 `date()`、`strtotime()` 进行字符串与时间戳互转,易受服务器时区/DST 影响,且循环内调用性能较差。 | 引入 `DateTime` 对象或 `nesbot/carbon` 库,统一时间计算与格式化。 | `$dt = new DateTime($date); $ts = $dt->getTimestamp();` | | 🟡 建议 | 输入参数 `$params` | 直接使用 `$params['date']`、`$params['merchant_id']` 等,未做类型校验或空值防御。若上游传入非法值,将导致 `strtotime` 警告或 SQL 异常。 | 在方法入口增加基础校验,或使用 DTO 对象接收参数。 | `if (empty($params['date']) || !preg_match('/^\d{8}$/', $params['date'])) { throwError('日期格式错误'); }` | ## 3. 总结与行动建议 ### 🔑 优先修复的关键问题 1. **修复状态累加 Bug**:立即将 `get_book_days_info()` 中的 `$this->book_days += 1;` 改为局部变量计算,避免多调用场景下的数据污染。 2. **防御静态缓存泄漏**:为所有 `self::$xxx` 静态属性增加请求级清理机制(如注册 `register_shutdown_function` 或在控制器基类中统一清理),防止 PHP-FPM 环境下的跨请求脏数据。 3. **修复数组展开异常**:对 `array_intersect(...)` 及类似展开操作增加 `count() > 1` 的前置判断,兼容 PHP 7/8 运行环境。 ### 🛠 后续重构与优化方向 1. **拆分巨型方法(SRP 原则)**:`get_book_day_time_info()` 承担了数据获取、时间计算、规则过滤、状态标记等 5 种以上职责。建议提取为独立的 `BookingTimeCalculator` 服务类,模型仅负责数据读写。 2. **统一时间处理策略**:废弃散落的 `strtotime`/`date` 字符串操作,封装 `TimeRange` 值对象,使用 `DateTimeImmutable` 进行区间交集/差集计算,彻底解决时区与跨天逻辑隐患。 3. **规范化与类型安全**: - 遵循 PSR-12 规范,统一缩进、命名与括号风格。 - 全面启用 PHP 7.4+ 类型声明(属性类型、参数类型、返回值类型)。 - 将魔法值替换为 `const` 枚举,提升代码自解释能力。 4. **框架适配说明**:代码结构高度符合 **CodeIgniter 3** 规范(`$CI =& get_instance()`、`system/` 目录、`$this->load->`)。若 `phpci` 为内部定制框架,请核对: - 是否支持依赖注入(DI)替代 `get_instance()`? - 模型基类 `Simple_model` 是否已实现查询缓存或防 SQL 注入的预处理机制? - 建议查阅 `phpci` 官方文档确认生命周期钩子,将静态缓存清理移至框架请求结束阶段。 > ⚠️ **局限性提示**:提供的代码在 `$this->next_date_room_book_time` 赋值处截断,后续可能存在的数据库写入、事务控制或最终返回逻辑未纳入审查。建议补充完整文件后再次进行深度审计。 --- *此 Issue 由代码审查服务自动创建*
TEXT
milestone_id
INTEGER
priority
INTEGER
is_closed
INTEGER
is_pull
INTEGER
num_comments
INTEGER
ref
TEXT
deadline_unix
INTEGER
created_unix
INTEGER
updated_unix
INTEGER
closed_unix
INTEGER
is_locked
INTEGER NOT NULL (default 0
content_version
INTEGER NOT NULL (default 0
time_estimate
INTEGER NOT NULL (default 0
Update
Cancel