# 智能决策生成系统 - 功能重构说明

## 📋 系统概述

智能决策生成系统包含3大核心功能模块，各司其职，相互配合：

### 1. **业务融合** - 决策管理中心
**功能定位**：生成和管理决策，执行决策

**核心功能**：
- ✅ **自动生成决策**：基于模型输出、业务规则、上下文信息融合自动生成决策
- ✅ **手动添加决策**：用户手动创建决策
- ✅ **手动执行**：点击执行按钮立即执行决策，控制物联网设备
- ✅ **自动执行**：设置触发条件，当环境条件满足时自动执行

### 2. **决策模拟** - 测试验证中心  
**功能定位**：使用测试数据验证决策效果

**核心功能**：
- ✅ 创建模拟场景（使用测试数据）
- ✅ 运行决策模拟（不真正执行，只模拟结果）
- ✅ 对比分析（对比不同方案的模拟结果）
- ✅ 效果评估（评估决策在不同情况下的表现）

### 3. **决策日志** - 执行记录中心
**功能定位**：记录真实的执行历史

**核心功能**：
- ✅ 记录每次手动执行的情况
- ✅ 记录每次自动执行的情况  
- ✅ 显示执行结果、受影响设备、执行时间等
- ✅ 支持查询、筛选、导出

---

## 🔄 模块关系图

```
┌─────────────────────────────────────────────────────────────┐
│                     智能决策生成系统                          │
└─────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┼─────────────────────┐
        │                     │                     │
┌───────▼──────────┐  ┌───────▼──────────┐  ┌──────▼──────────┐
│   业务融合        │  │   决策模拟        │  │   决策日志       │
│ (决策管理中心)    │  │ (测试验证中心)    │  │ (执行记录中心)   │
├──────────────────┤  ├──────────────────┤  ├─────────────────┤
│                  │  │                  │  │                 │
│ 1. 自动生成决策  │  │ 1. 创建测试场景  │  │ 1. 手动执行记录 │
│ 2. 手动添加决策  │  │ 2. 运行模拟      │  │ 2. 自动执行记录 │
│ 3. 手动执行      │  │ 3. 结果对比      │  │ 3. 执行详情     │
│ 4. 自动执行      │  │ 4. 效果评估      │  │ 4. 统计分析     │
│                  │  │                  │  │                 │
│ 输出：           │  │ 输出：           │  │ 输入：          │
│ • 决策列表       │  │ • 模拟报告       │  │ • 执行数据      │
│ • 执行记录 ────────→─────────────────────→─• 历史日志      │
│                  │  │ (仅供参考)       │  │                 │
└──────────────────┘  └──────────────────┘  └─────────────────┘
```

---

## 📦 详细功能设计

### 一、业务融合（AIBusinessFusion.tsx）

#### 1.1 决策来源分类

```typescript
type DecisionSource = 'auto' | 'manual';

// 自动生成：由系统根据模型、规则、上下文融合生成
// 手动添加：由用户手动创建
```

**自动生成决策**：
- 来源：模型服务输出 + 业务规则 + 上下文信息
- 流程：数据收集 → 模型分析 → 规则匹配 → 上下文验证 → 加权融合 → 生成决策
- 特点：有完整的融合过程记录，有置信度评分

**手动添加决策**：
- 来源：用户直接创建
- 流程：填写表单 → 设置参数 → 保存决策
- 特点：无融合过程，置信度由用户评估

#### 1.2 执行模式分类

```typescript
type ExecutionMode = 'manual' | 'auto';

// 手动执行：点击执行按钮立即执行
// 自动执行：设置触发条件，满足条件时自动执行
```

**手动执行**：
- 触发方式：用户点击"执行"按钮
- 流程：点击执行 → 二次确认 → 执行决策 → 记录日志
- 适用场景：需要人工判断的决策

**自动执行**：
- 触发方式：环境条件满足时自动触发
- 流程：监测条件 → 条件满足 → 自动执行 → 记录日志
- 触发条件类型：
  - 阈值触发：如土壤湿度 < 30%
  - 时间触发：如每天17:00
  - 事件触发：如温度突变

#### 1.3 UI结构

```
┌────────────────────────────────────────────────────────┐
│ 业务融合功能                                [+ 手动添加决策] │
├────────────────────────────────────────────────────────┤
│ Tab: [全部决策] [自动生成] [手动添加]                    │
├────────────────────────────────────────────────────────┤
│ 决策列表                                                │
│ ┌──────────────────────────────────────────────────┐  │
│ │ 3号大棚灌溉决策            [编辑] [执行] [查看详情]  │  │
│ │ 来源:自动生成 | 执行模式:自动执行                    │  │
│ │ 触发条件:土壤湿度<30%                                │  │
│ │ 目标设备:灌溉控制器-01, 水泵-A2                      │  │
│ │ 置信度: 89% | 生成时间: 2024-10-23 10:30          │  │
│ └──────────────────────────────────────────────────┘  │
│                                                        │
│ ┌──────────────────────────────────────────────────┐  │
│ │ 人工病虫害防治决策        [编辑] [执行] [查看详情]    │  │
│ │ 来源:手动添加 | 执行模式:手动执行                    │  │
│ │ 创建人:张三 | 创建时间: 2024-10-22 14:20           │  │
│ └──────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────┘
```

#### 1.4 数据结构

```typescript
interface DecisionResult {
  id: string;
  name: string;
  source: DecisionSource; // 'auto' | 'manual'
  executionMode: ExecutionMode; // 'manual' | 'auto'
  
  // 自动执行相关
  autoTriggerConditions?: {
    type: 'threshold' | 'time' | 'event';
    conditions: Array<{
      field: string;      // 如: '土壤湿度'
      operator: string;   // 如: '<'
      value: any;         // 如: 30
    }>;
  };
  
  // 基本信息
  level: DecisionLevel;
  confidence: number;
  recommendation: string;
  explanation: string;
  actionItems: string[];
  targetDevices?: string[]; // 目标控制设备
  
  // 自动生成的融合信息
  inputData: {
    models: Array<{ id: string; modelName: string }>;
    rules: Array<{ id: string; name: string }>;
    context: Array<{ id: string; name: string }>;
  };
  fusionProcess: Array<{
    step: string;
    result: any;
    weight: number;
  }>;
  
  // 时间信息
  generatedAt: string;
  createdBy?: string; // 手动添加时的创建人
}
```

#### 1.5 新增功能

**✅ 手动添加决策对话框**：
```tsx
<Dialog open={showAddDecisionDialog}>
  <DialogHeader>
    <DialogTitle>手动添加决策</DialogTitle>
  </DialogHeader>
  
  <DialogContent>
    <Input label="决策名称" />
    <Select label="决策级别" />
    <Select label="执行模式">
      <Option value="manual">手动执行</Option>
      <Option value="auto">自动执行</Option>
    </Select>
    
    {/* 如果选择自动执行，显示触发条件设置 */}
    {executionMode === 'auto' && (
      <Card>
        <h4>触发条件设置</h4>
        <Select label="触发类型">
          <Option value="threshold">阈值触发</Option>
          <Option value="time">时间触发</Option>
          <Option value="event">事件触发</Option>
        </Select>
        {/* 条件设置表单 */}
      </Card>
    )}
    
    <Textarea label="决策说明" />
    <Textarea label="执行步骤" />
    <Input label="目标设备" />
  </DialogContent>
  
  <DialogFooter>
    <Button onClick={handleSave}>保存决策</Button>
  </DialogFooter>
</Dialog>
```

**✅ 编辑决策功能**：
- 点击"编辑"按钮打开编辑对话框
- 可以修改执行模式、触发条件等
- 自动生成的决策也可以编辑部分内容

**✅ 决策分类展示**：
- Tab 1: 全部决策 - 显示所有决策
- Tab 2: 自动生成 - 只显示source='auto'的决策
- Tab 3: 手动添加 - 只显示source='manual'的决策

**✅ 执行模式标识**：
- 手动执行：显示"手动执行"标签
- 自动执行：显示"自动执行"标签 + 触发条件

---

### 二、决策模拟（AIDecisionSimulation.tsx）

#### 2.1 核心定位

**这是测试验证工具，不是真实执行！**

- 使用测试数据模拟决策效果
- 不会真正控制物联网设备
- 用于验证决策在不同情况下的表现
- 结果仅供参考，不记录到决策日志

#### 2.2 功能模块

**模拟场景管理**：
```
- 创建模拟场景：设置测试数据
- 运行模拟：模拟决策执行过程
- 查看结果：查看模拟的输出结果
- 结果对比：对比不同场景的模拟结果
```

**UI结构**：
```
┌────────────────────────────────────────────────────┐
│ 决策模拟 (测试验证工具)                              │
├────────────────────────────────────────────────────┤
│ Tab: [模拟场景] [运行模拟] [结果对比]                │
├────────────────────────────────────────────────────┤
│ [+ 创建模拟场景]                                    │
│                                                    │
│ 模拟场景列表:                                       │
│ ┌──────────────────────────────────────────────┐  │
│ │ 高温干旱场景               [运行] [编辑] [删除]  │  │
│ │ 测试数据: 温度35℃, 湿度20%, 无降雨              │  │
│ │ 模拟状态: 已完成 | 运行时间: 2024-10-23        │  │
│ │ 模拟结果: 建议立即灌溉120升                      │  │
│ └──────────────────────────────────────────────┘  │
│                                                    │
│ 💡 提示: 模拟结果仅供参考，不会真实执行             │
└────────────────────────────────────────────────────┘
```

#### 2.3 与业务融合的区别

| 对比项 | 业务融合 | 决策模拟 |
|--------|----------|----------|
| **数据来源** | 真实环境数据 | 测试数据 |
| **执行方式** | 真实执行，控制设备 | 模拟执行，不控制设备 |
| **记录日志** | 是，记录到决策日志 | 否，不记录 |
| **用途** | 生产使用 | 测试验证 |
| **风险** | 会影响实际生产 | 无风险 |

---

### 三、决策日志（AIDecisionLog.tsx）

#### 3.1 核心定位

**记录真实的执行历史**

- 记录来自业务融合的真实执行
- 区分手动执行和自动执行
- 不包含决策模拟的记录

#### 3.2 日志内容

```typescript
interface ExecutionLog {
  id: string;
  executionId: string;
  decisionId: string;
  decisionName: string;
  
  // 执行类型
  executionType: 'manual' | 'auto'; // 手动执行 or 自动执行
  
  // 自动执行时的触发信息
  triggerInfo?: {
    triggerTime: string;
    triggerCondition: string;
    conditionValue: any;
  };
  
  // 执行信息
  executionTime: string;
  executionDuration: string;
  executionStatus: 'success' | 'failed' | 'partial';
  
  // 受影响的设备
  affectedDevices: Array<{
    deviceId: string;
    deviceName: string;
    action: string;
    status: string;
  }>;
  
  // 执行结果
  executionResult: {
    completedSteps: number;
    totalSteps: number;
    metrics: Record<string, any>;
  };
  
  // 操作人（手动执行时）
  operator?: string;
  
  // 备注
  remarks?: string;
}
```

#### 3.3 UI结构

```
┌────────────────────────────────────────────────────────┐
│ 决策日志                                                │
├────────────────────────────────────────────────────────┤
│ Tab: [全部日志] [手动执行] [自动执行]                    │
├────────────────────────────────────────────────────────┤
│ 筛选: [日期范围] [决策名称] [执行状态]                   │
├────────────────────────────────────────────────────────┤
│ 执行记录列表:                                           │
│ ┌──────────────────────────────────────────────────┐  │
│ │ 执行ID: exec_1729659234        [查看详情]          │  │
│ │ 决策: 3号大棚灌溉决策                               │  │
│ │ 执行类型: 🤖 自动执行                              │  │
│ │ 触发条件: 土壤湿度<30% (当前: 28%)                  │  │
│ │ 执行时间: 2024-10-23 14:20:34                     │  │
│ │ 执行结果: ✅ 成功                                   │  │
│ │ 受影响设备: 灌溉控制器-01, 水泵-A2                  │  │
│ └──────────────────────────────────────────────────┘  │
│                                                        │
│ ┌──────────────────────────────────────────────────┐  │
│ │ 执行ID: exec_1729659180        [查看详情]          │  │
│ │ 决策: 人工病虫害防治决策                            │  │
│ │ 执行类型: 👤 手动执行                              │  │
│ │ 操作人: 张三                                        │  │
│ │ 执行时间: 2024-10-23 13:15:20                     │  │
│ │ 执行结果: ✅ 成功                                   │  │
│ └──────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────┘
```

#### 3.4 统计分析

```
- 总执行次数
- 手动执行次数 vs 自动执行次数
- 成功率统计
- 最常执行的决策
- 设备使用统计
```

---

## 🔧 技术实现要点

### 1. 业务融合改造

**新增功能**：
```tsx
// 1. 手动添加决策对话框
const [showAddDecisionDialog, setShowAddDecisionDialog] = useState(false);

// 2. 决策分类Tab
const [activeTab, setActiveTab] = useState<'all' | 'auto' | 'manual'>('all');

// 3. 编辑决策
const [showEditDialog, setShowEditDialog] = useState(false);
const [editingDecision, setEditingDecision] = useState<DecisionResult | null>(null);

// 4. 决策筛选
const filteredDecisions = decisionResults.filter(d => {
  if (activeTab === 'all') return true;
  if (activeTab === 'auto') return d.source === 'auto';
  if (activeTab === 'manual') return d.source === 'manual';
  return true;
});
```

**执行记录到日志**：
```tsx
const handleConfirmExecute = async () => {
  // ... 执行决策 ...
  
  // 执行成功后，记录到决策日志
  const logEntry = {
    executionId: `exec_${Date.now()}`,
    decisionId: executingResult.id,
    decisionName: executingResult.name,
    executionType: executingResult.executionMode === 'manual' ? 'manual' : 'auto',
    executionTime: new Date().toISOString(),
    executionStatus: 'success',
    affectedDevices: [...],
    executionResult: {...},
    operator: currentUser.name, // 手动执行时
  };
  
  // 保存到日志
  saveExecutionLog(logEntry);
};
```

### 2. 决策模拟保持不变

**明确说明**：
- 在页面顶部添加提示："决策模拟是测试验证工具，使用测试数据进行模拟，不会真实执行"
- 模拟结果添加水印："模拟结果 - 仅供参考"

### 3. 决策日志改造

**筛选功能**：
```tsx
// Tab筛选
<Tabs value={activeTab} onValueChange={setActiveTab}>
  <TabsList>
    <TabsTrigger value="all">全部日志</TabsTrigger>
    <TabsTrigger value="manual">手动执行</TabsTrigger>
    <TabsTrigger value="auto">自动执行</TabsTrigger>
  </TabsList>
</Tabs>

// 数据筛选
const filteredLogs = executionLogs.filter(log => {
  if (activeTab === 'manual') return log.executionType === 'manual';
  if (activeTab === 'auto') return log.executionType === 'auto';
  return true;
});
```

**执行类型标识**：
```tsx
{log.executionType === 'manual' ? (
  <Badge className="bg-blue-100 text-blue-800">
    <User className="w-3 h-3 mr-1" />
    手动执行
  </Badge>
) : (
  <Badge className="bg-purple-100 text-purple-800">
    <Zap className="w-3 h-3 mr-1" />
    自动执行
  </Badge>
)}
```

---

## 📊 使用流程示例

### 场景1: 自动生成决策 + 自动执行

```
1. 模型服务检测到土壤湿度低于30%
   ↓
2. 业务融合自动生成"灌溉决策"
   - 来源: 自动生成
   - 执行模式: 自动执行
   - 触发条件: 土壤湿度<30%
   ↓
3. 条件满足，自动执行决策
   - 控制灌溉控制器-01开启
   - 控制水泵-A2启动
   ↓
4. 执行完成，记录到决策日志
   - 执行类型: 自动执行
   - 触发条件: 土壤湿度28%<30%
   - 执行结果: 成功
```

### 场景2: 手动添加决策 + 手动执行

```
1. 用户发现病虫害，点击"手动添加决策"
   ↓
2. 填写决策信息
   - 决策名称: 人工病虫害防治
   - 执行模式: 手动执行
   - 执行步骤: 喷洒农药、加强通风
   ↓
3. 保存决策到决策列表
   - 来源: 手动添加
   - 创建人: 张三
   ↓
4. 用户点击"执行"按钮
   ↓
5. 二次确认后执行
   ↓
6. 执行完成，记录到决策日志
   - 执行类型: 手动执行
   - 操作人: 张三
   - 执行结果: 成功
```

### 场景3: 决策模拟（测试）

```
1. 用户想测试高温干旱情况下的决策效果
   ↓
2. 进入决策模拟模块
   ↓
3. 创建模拟场景
   - 场景名称: 高温干旱场景
   - 测试数据: 温度35℃, 湿度20%
   ↓
4. 运行模拟
   ↓
5. 查看模拟结果
   - 建议: 立即灌溉120升
   - 预期效果: 湿度提升至60%
   ↓
6. 结果仅供参考，不会真实执行
   ✗ 不记录到决策日志
   ✓ 用户确认方案可行后，可在业务融合中真实执行
```

---

## 🎯 实施步骤

### Phase 1: 业务融合改造 (优先级最高)
- ✅ 更新DecisionResult接口
- ✅ 添加手动添加决策对话框
- ✅ 添加编辑决策功能
- ✅ 添加决策分类Tab
- ✅ 更新现有数据，添加source和executionMode字段
- ✅ 实现自动执行的触发条件设置

### Phase 2: 决策日志改造
- ✅ 更新ExecutionLog接口
- ✅ 添加执行类型筛选Tab
- ✅ 添加执行类型标识（手动/自动）
- ✅ 添加触发信息显示（自动执行时）
- ✅ 更新统计图表

### Phase 3: 决策模拟优化  
- ✅ 添加明确提示："这是测试工具，不会真实执行"
- ✅ 模拟结果添加水印
- ✅ 优化UI，与真实执行区分开

### Phase 4: 联调测试
- ✅ 测试自动生成 + 自动执行流程
- ✅ 测试手动添加 + 手动执行流程
- ✅ 测试决策模拟流程
- ✅ 测试日志记录和查询

---

## ✅ 验收标准

### 业务融合
- [ ] 可以自动生成决策（带融合过程）
- [ ] 可以手动添加决策（填写表单）
- [ ] 每个决策可以设置执行模式（手动/自动）
- [ ] 自动执行可以设置触发条件
- [ ] 手动执行有二次确认
- [ ] 执行后正确记录到决策日志
- [ ] 可以编辑决策
- [ ] 可以按来源分类查看（全部/自动生成/手动添加）

### 决策模拟
- [ ] 明确标识这是测试工具
- [ ] 可以创建模拟场景
- [ ] 可以运行模拟
- [ ] 可以对比模拟结果
- [ ] 模拟不会真实执行
- [ ] 模拟不会记录到决策日志

### 决策日志
- [ ] 记录所有真实执行（来自业务融合）
- [ ] 区分手动执行和自动执行
- [ ] 自动执行显示触发信息
- [ ] 手动执行显示操作人
- [ ] 可以按执行类型筛选
- [ ] 显示详细的执行结果
- [ ] 统计图表准确

---

**更新时间**: 2024-10-23  
**文档版本**: v1.0  
**状态**: 待实施
