# 督查内容统计修复说明

## 📋 问题描述

**supervision_edit.php** 督查内容没有统计到 **vehicle_reminder_records.php**（逾期未检车辆）的督促记录。

## 🔍 问题分析

在 `supervision_get_unit_data.php` 文件中，只统计了重点车辆的督促提醒（`key_vehicle_reminders`），但遗漏了所有车辆的逾期督促记录（`vehicle_reminders`）。

### 原有代码的问题

```php
// 只统计了重点车辆的督促记录
$r = $conn->query("SELECT COUNT(*) as cnt FROM vehicle_reminders r INNER JOIN vehicle_ledgers v ON r.vehicle_id = v.id WHERE v.unit_id = $unit_id AND v.vehicle_category = 'key' AND r.created_at BETWEEN '$start_datetime' AND '$end_datetime'");
if ($r) $data['key_vehicle_reminders'] = (int)$r->fetch_assoc()['cnt'];
```

这个查询只会统计 `vehicle_category = 'key'`（重点车辆）的督促记录，而遗漏了普通车辆的逾期督促记录。

## ✅ 修复方案

### 1. 添加新的统计字段

在 `$data` 数组中添加 `vehicle_reminders` 字段：

```php
$data = [
    // ... 其他字段 ...
    'vehicle_reminders' => 0,  // 逾期未检车辆督促记录数量
];
```

### 2. 增加统计查询

添加对所有车辆督促记录的统计：

```php
try {
    // 统计逾期未检车辆督促记录数量（所有车辆的督促记录，不限车辆类型）
    $r = $conn->query("SELECT COUNT(*) as cnt FROM vehicle_reminders r INNER JOIN vehicle_ledgers v ON r.vehicle_id = v.id WHERE v.unit_id = $unit_id AND r.created_at BETWEEN '$start_datetime' AND '$end_datetime'");
    if ($r) {
        $overdue_reminders = (int)$r->fetch_assoc()['cnt'];
        $data['vehicle_reminders'] = $overdue_reminders;
    }
} catch (Exception $e) {}
```

### 3. 更新督查内容生成

在生成督查内容时，添加逾期未检车辆督促的统计：

```php
if ($data['vehicle_reminders'] > 0) {
    $content .= '逾期未检车辆督促' . $data['vehicle_reminders'] . '次。';
}
```

### 4. 添加到标准检查项

在 `$default_standards` 和 `$check_items` 中添加：

```php
$default_standards = [
    // ... 其他标准 ...
    'vehicle_reminders' => ['name' => '逾期未检车辆督促', 'value' => 0, 'frequency' => 'monthly']
];

$check_items = [
    // ... 其他检查项 ...
    'vehicle_reminders' => '逾期未检车辆督促'
];
```

## 📝 修改的文件

### supervision_get_unit_data.php

**修改位置：**
- 第 125 行：添加 `vehicle_reminders` 字段定义
- 第 140 行：添加到默认标准配置
- 第 258-266 行：添加统计查询
- 第 435-437 行：添加到督查内容生成
- 第 463 行：添加到检查项列表

**修改效果：**
- ✅ 现在会统计单位下所有车辆的逾期督促记录
- ✅ 督查内容中会显示"逾期未检车辆督促 X 次"
- ✅ 可以设置督促标准并进行检查

## 📊 数据统计逻辑

### 两个统计项的区别

| 统计项 | 表名 | 统计范围 | 说明 |
|--------|------|----------|------|
| `key_vehicle_reminders` | vehicle_reminders + vehicle_ledgers | 仅重点车辆（vehicle_category = 'key'） | 重点车辆的督促提醒 |
| `vehicle_reminders` | vehicle_reminders + vehicle_ledgers | 所有车辆（不限类型） | 逾期未检车辆的督促记录 |

### SQL 查询对比

**重点车辆督促：**
```sql
SELECT COUNT(*) as cnt 
FROM vehicle_reminders r 
INNER JOIN vehicle_ledgers v ON r.vehicle_id = v.id 
WHERE v.unit_id = $unit_id 
  AND v.vehicle_category = 'key' 
  AND r.created_at BETWEEN '$start_datetime' AND '$end_datetime'
```

**所有车辆督促（新增）：**
```sql
SELECT COUNT(*) as cnt 
FROM vehicle_reminders r 
INNER JOIN vehicle_ledgers v ON r.vehicle_id = v.id 
WHERE v.unit_id = $unit_id 
  AND r.created_at BETWEEN '$start_datetime' AND '$end_datetime'
```

## 🧪 测试方法

### 方法 1：访问督查编辑页面

1. 打开 `supervision_edit.php?id=记录 ID`
2. 选择一个单位
3. 查看"督查内容"是否包含"逾期未检车辆督促 X 次"

### 方法 2：直接调用 API

访问：`supervision_get_unit_data.php?unit_id=单位 ID&month=2026-03`

查看返回的 JSON 数据中：
```json
{
    "data": {
        "vehicle_reminders": 5,  // 这里应该有数值
        "key_vehicle_reminders": 3
    },
    "content": "重点车辆督促 3 次。逾期未检车辆督促 5 次。"
}
```

### 方法 3：数据库验证

执行 SQL 查询验证：

```sql
-- 查看当前月份的督促记录
SELECT 
    v.unit_id,
    u.name AS unit_name,
    COUNT(*) as total_reminders,
    SUM(CASE WHEN v.vehicle_category = 'key' THEN 1 ELSE 0 END) as key_vehicle_reminders
FROM vehicle_reminders r
LEFT JOIN vehicle_ledgers v ON r.vehicle_id = v.id
LEFT JOIN units u ON v.unit_id = u.id
WHERE r.created_at >= DATE_FORMAT(NOW(), '%Y-%m-01 00:00:00')
GROUP BY v.unit_id, u.name;
```

## ⚠️ 注意事项

1. **时间范围**：统计的是指定月份的数据（由 `$start_datetime` 和 `$end_datetime` 确定）

2. **单位隔离**：只统计当前单位的数据（通过 `v.unit_id = $unit_id` 过滤）

3. **数据关联**：通过 `vehicle_id` 关联 `vehicle_reminders` 和 `vehicle_ledgers` 表

4. **标准设置**：可以在 `supervision_standards` 表中为每个单位设置单独的督促标准

## 🎯 预期效果

修复后，在 `supervision_edit.php` 页面选择单位时：

### 修复前
```
本月开展安全检查 5 次。
重点车辆 10 辆，已督促提醒 3 次。
```

### 修复后
```
本月开展安全检查 5 次。
重点车辆 10 辆，已督促提醒 3 次。
逾期未检车辆督促 8 次。
```

## 📞 技术支持

如果修复后仍有问题，请检查：
1. `vehicle_reminders` 表是否有数据
2. `vehicle_ledgers` 表的 `unit_id` 是否正确
3. 督促记录的 `created_at` 是否在统计时间范围内
4. 用户是否有权限访问该单位数据

---

**修复日期：** 2026-03-02  
**修复文件：** supervision_get_unit_data.php  
**影响功能：** 督查内容自动生成、督导检查标准检查
