# Kylin Agriculture

智慧农业监测扩展包 — 环境监测、种植管理、病虫害预警、产量统计。

## 功能模块

| 模块 | 说明 | 核心模型 |
|------|------|----------|
| 环境监测 | 传感器数据采集（温度/湿度/光照/土壤）、实时监测、异常报警 | EnvironmentalData, Sensor |
| 种植管理 | 地块管理、种植计划、农事记录、农药使用记录 | Farmland, PlantingPlan, FarmRecord, PesticideRecord |
| 病虫害预警 | 病虫害识别、四级预警（蓝/黄/橙/红）、防治方案 | PestWarning, WarningLevel |
| 产量统计 | 产量记录、成本分析、报表导出 | YieldRecord, CostAnalysis |

## 安装

```bash
composer require kylin/agriculture
php artisan vendor:publish --tag=kylin-agriculture-config
php artisan vendor:publish --tag=kylin-agriculture-migrations
php artisan migrate
```

## 配置说明

### 农药管理配置

```php
// config/kylin-agriculture.php
return [
    'banned_pesticides' => [        // 禁用农药清单（50+ 品种）
        '六六六', '滴滴涕', '毒杀芬', '二溴氯丙烷',
        '杀虫脒', '二溴乙烷', '除草醚', '艾氏剂',
        '狄氏剂', '汞制剂', '砷类', '铅类',
        // ... 更多禁用农药
    ],
    'pesticide_record_retention_days' => 730, // 农药使用记录保留 >= 2 年
    'default_safety_interval_days' => 7,       // 默认安全间隔期（天）
    'operator_desensitize' => true,            // 操作人员信息脱敏
    'upload_allowed_mime_types' => [           // 允许上传的文件类型
        'image/jpeg', 'image/png', 'application/pdf',
    ],
];
```

### 预警配置

```php
'warning' => [
    'levels' => [
        'blue'   => ['name' => '蓝色预警', 'severity' => 1], // 一般
        'yellow' => ['name' => '黄色预警', 'severity' => 2], // 较重
        'orange' => ['name' => '橙色预警', 'severity' => 3], // 严重
        'red'    => ['name' => '红色预警', 'severity' => 4], // 特别严重
    ],
    'channels' => ['database', 'sms', 'wechat'], // 推送通道
];
```

## 使用示例

### 农药使用记录

```php
use Kylin\Agriculture\Models\PesticideRecord;

// 创建农药使用记录（自动校验禁用农药 + 计算安全间隔期）
$record = PesticideRecord::create([
    'farmland_id'   => 1,
    'pesticide'     => '吡虫啉',
    'dosage'        => 50,       // 克/亩
    'area'          => 2.5,      // 亩
    'applied_at'    => now(),
    'safety_interval' => 7,     // 安全间隔期（天）
    'operator_id'   => auth()->id(),
]);

// safe_until 自动计算：applied_at + safety_interval 天
echo $record->safe_until; // 2026-06-26

// 检查安全间隔期是否已过
if ($record->isSafeIntervalPassed()) {
    echo "可以采摘";
}

// 操作人员脱敏（自动，通过 DesensitizesOperator Trait）
// 输出示例：张**、李*丰
$record = FarmRecord::with('operator')->first();
echo $record->operator_name; // 脱敏后的姓名
```

### 病虫害预警

```php
use Kylin\Agriculture\Models\PestWarning;
use Kylin\Agriculture\Enums\WarningLevel;

// 创建预警
$warning = PestWarning::create([
    'farmland_id' => 1,
    'pest_type'   => '稻飞虱',
    'level'       => WarningLevel::Orange,
    'description' => '田间稻飞虱密度超标，建议立即喷药防治',
]);

// 预警等级
echo $warning->level->severity(); // 3
echo $warning->level->isSevere(); // true（橙色及以上为严重预警）
```

### 环境监测

```php
use Kylin\Agriculture\Models\EnvironmentalData;

// 传感器数据采集
EnvironmentalData::create([
    'sensor_id'    => 1,
    'temperature'  => 28.5,  // 温度 ℃
    'humidity'     => 65.2,  // 湿度 %
    'light'        => 1200,  // 光照 lux
    'soil_moisture'=> 35.8,  // 土壤湿度 %
    'recorded_at'  => now(),
]);

// 清理过期农药记录（>= 2 年，依据《农产品质量安全法》第二十七条）
php artisan agriculture:clean-pesticide-records

// 指定保留天数
php artisan agriculture:clean-pesticide-records --days=730

// 强制执行，跳过确认
php artisan agriculture:clean-pesticide-records --force
```

## 数据库表

| 表名 | 说明 |
|------|------|
| `kc_agriculture_farmlands` | 地块表 |
| `kc_agriculture_sensors` | 传感器表 |
| `kc_agriculture_environmental_data` | 环境监测数据表 |
| `kc_agriculture_planting_plans` | 种植计划表 |
| `kc_agriculture_farm_records` | 农事记录表 |
| `kc_agriculture_pesticide_records` | 农药使用记录表（含禁用校验） |
| `kc_agriculture_pest_warnings` | 病虫害预警表 |
| `kc_agriculture_yield_records` | 产量记录表 |

## 法律合规

详见 [LEGAL.md](./LEGAL.md)，涵盖：
- 《中华人民共和国农产品质量安全法》(2023.1.1)
- 《农药管理条例》(2017.6.1 修订)
- 《中华人民共和国食品安全法》(2021.4.29)
- 《中华人民共和国种子法》(2022.3.1)
- 《中华人民共和国数据安全法》(2021.9.1)
- 《中华人民共和国个人信息保护法》(2021.11.1)

## 依赖

- PHP ^8.5
- Laravel ^13.0
- kylin/core

## 许可证

私有软件，未经授权禁止使用。