# 物资领用 - 领用审批完整功能指南

## 🎯 功能概述

领用审批功能实现了从自动触发审批流程到审批操作的完整闭环管理，支持多级审批、智能规则匹配、多渠道通知和全程留痕。

## ✨ 核心功能

### 1. 自动触发审批流程 ⚡

系统根据申请单的**物资价值**和**物资类型**，自动触发预设的电子审批流程。

#### 审批规则

**金额等级规则**
```
┌─────────────────┬──────────┬─────────────────────────┐
│   申请金额      │ 审批等级 │       审批人            │
├─────────────────┼──────────┼─────────────────────────┤
│  < ¥10,000      │   1级    │  生产队长               │
│  ¥10,000-49,999 │   2级    │  生产队长 + 财务主管    │
│  ≥ ¥50,000      │   3级    │  总经理+财务主管+生产队长│
└─────────────────┴──────────┴─────────────────────────┘
```

**物资类型规则**
```
特殊物资（农药/化肥）：
  → 额外需要仓库管理员审批
  → 确保危险品管理合规
```

**优先级规则**
```
高优先级（紧急申请）：
  → 触发加急通知
  → 所有审批人同时收到通知
  → 短信+系统消息双重提醒
```

#### 触发流程示例

**示例1：普通申请（金额¥8,000）**
```
申请提交
  ↓
自动判断：金额 < ¥10,000
  ↓
审批流程：1级审批
  ↓
审批人：生产队长
  ↓
通知方式：系统消息
```

**示例2：大额申请（金额¥65,000）**
```
申请提交
  ↓
自动判断：金额 ≥ ¥50,000
  ↓
审批流程：3级审批
  ↓
审批人：总经理、财务主管、生产队长
  ↓
通知方式：系统消息 + 短信
```

**示例3：特殊物资（农药申请，金额¥15,000）**
```
申请提交
  ↓
自动判断：
  - 金额 ¥10,000-49,999 → 2级审批
  - 包含农药 → 加入仓库管理员
  ↓
审批流程：2级审批 + 特殊审批
  ↓
审批人：生产队长、财务主管、仓库管理员
  ↓
通知方式：系统消息
```

### 2. 多渠道消息通知 📱

支持多种通知渠道，确保审批人及时收到通知。

#### 支持的通知渠道

| 渠道 | 说明 | 适用场景 |
|------|------|----------|
| **系统消息** | 站内消息通知 | 所有审批（默认） |
| **短信通知** | 手机短信提醒 | 紧急申请、大额审批 |
| **邮件通知** | 邮箱推送详情 | 需要详细记录的审批 |
| **微信推送** | 企业微信消息 | 移动办公场景 |

#### 通知内容

**普通通知模板**
```
【物资领用审批】
您有新的审批申请待处理

申请单号：LY202410220001
申请人：张三
申请部门：种植一队
申请金额：¥8,500
申请物品：复合肥 50袋

请登录系统查看详情并处理
```

**紧急通知模板**
```
【紧急审批】⚠️
您有紧急审批申请待处理！

申请单号：LY202410220002
申请人：李四
优先级：高
申请金额：¥65,000
申请物品：复合肥 200袋 + 尿素 100袋

紧急作业需求，请尽快处理
```

### 3. 在线审批操作 ✅

审批人可以在线查看申请详情，并作出三种审批决定。

#### 审批决定类型

##### 1️⃣ 同意

**适用场景**
- 申请合理，符合生产需求
- 库存充足，可以满足
- 用途明确，无异议

**操作流程**
```
1. 点击"同意"卡片
2. 填写同意理由（必填）
   例如："申请合理，库存充足，同意领用"
3. 选择通知渠道
4. 点击"确认审批"
```

**审批后处理**
- 申请状态：待审批 → 已通过
- 通知申请人：审批通过
- 下一步：等待仓库出库

##### 2️⃣ 修改

**适用场景**
- 申请数量过多，需要调整
- 部分物品不批准
- 建议更换物资类型

**操作流程**
```
1. 点击"修改"卡片
2. 在"调整申请数量"区域修改数量
   原始申请：复合肥 100袋
   调整后：复合肥 80袋
3. 填写修改说明（必填）
   例如："库存有限，调整为80袋，请确认"
4. 选择通知渠道
5. 点击"确认审批"
```

**修改功能特点**
- 可修改每项物品的数量
- 修改后的数量作为最终批准数量
- 申请人会收到修改通知
- 申请人可以选择接受或重新申请

**审批后处理**
- 申请状态：待审批 → 已修改
- 通知申请人：申请需要修改
- 下一步：申请人确认后进入出库

##### 3️⃣ 驳回

**适用场景**
- 申请不合理
- 用途不明确
- 库存不足
- 不符合规定

**操作流程**
```
1. 点击"驳回"卡片
2. 填写驳回原因（必填，详细说明）
   例如："用途说明不清，请补充详细作业计划"
3. 选择通知渠道
4. 点击"确认审批"
```

**审批后处理**
- 申请状态：待审批 → 已驳回
- 通知申请人：申请被驳回
- 下一步：申请人修改后重新提交

### 4. 审批详情查看 📋

审批人可以查看申请的完整信息，辅助审批决策。

#### 可查看信息

**基本信息**
- 申请单号
- 申请人 + 部门
- 申请时间
- 计划领用时间
- 优先级
- 用途说明

**物品清单**
- 物资名称 + 类型
- 申请数量
- 当前库存（重要参考）
- 预估单价
- 小计金额
- **总金额**（审批重要依据）

**附件文件**
- 施肥方案
- 作业计划
- 现场照片
- 其他说明文件

**审批规则提示**
- 当前申请适用的审批规则
- 需要哪些审批人
- 审批等级

### 5. 全程留痕机制 📝

所有审批操作都会完整记录，确保可追溯。

#### 审批记录内容

```typescript
审批记录 {
  申请单号: "LY202410220001"
  审批人: "李队长"
  审批决定: "同意" | "驳回" | "修改"
  审批意见: "申请合理，库存充足，同意领用"
  审批时间: "2024-10-22 14:30"
  处理时长: "15分钟"
  修改内容: [
    {
      物资: "复合肥",
      原数量: 100,
      批准数量: 80
    }
  ]
  通知渠道: ["系统消息", "短信"]
}
```

#### 审批历史查询

**查询维度**
- 按申请单号查询
- 按审批人查询
- 按审批时间查询
- 按审批结果查询

**展示内容**
- 审批单号
- 审批人
- 审批结果（同意/驳回/修改）
- 审批意见
- 审批时间
- 处理时长

## 🔄 完整审批流程

### 流程图

```
┌──────────────┐
│  申请人提交  │
│  领用申请    │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 系统自动判断 │
│ 审批规则     │
│ - 金额等级   │
│ - 物资类型   │
│ - 优先级     │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 分配审批人   │
│ 触发审批流程 │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 发送通知     │
│ - 系统消息   │
│ - 短信       │
│ - 邮件       │
│ - 微信       │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 审批人处理   │
│ - 查看详情   │
│ - 做出决定   │
│ - 填写意见   │
└──────┬───────┘
       │
       ├─→ 同意 ──→ 进入出库环节
       │
       ├─→ 修改 ──→ 通知申请人 ──→ 申请人确认
       │
       └─→ 驳回 ──→ 通知申请人 ──→ 申请人重新提交
```

### 时间节点

| 环节 | 时间 |
|------|------|
| 申请提交 | T0 |
| 触发审批流程 | T0 + 1秒（自动） |
| 发送通知 | T0 + 2秒（自动） |
| 审批人查看 | T0 + N分钟 |
| 审批决定 | 取决于审批人 |
| 通知申请人 | 审批完成后1秒 |

## 📊 使用示例

### 示例1：普通施肥申请审批

**申请信息**
```
申请单号：LY202410220001
申请人：张三（种植一队）
申请时间：2024-10-22 09:30
计划领用时间：2024-10-25
优先级：中
用途：1号田块水稻施肥作业

物品清单：
- 复合肥 50袋 × ¥150 = ¥7,500
- 尿素 30袋 × ¥100 = ¥3,000
总金额：¥10,500

附件：施肥方案.pdf
```

**自动审批流程**
```
1. 系统判断：
   - 金额 ¥10,500（¥10,000-49,999）
   - 物资类型：肥料
   - 优先级：中
   
2. 审批规则：
   - 审批等级：2级
   - 审批人：生产队长、财务主管
   
3. 发送通知：
   - 渠道：系统消息
   - 对象：生产队长、财务主管
```

**审批人操作（生产队长）**
```
1. 收到系统消息通知
2. 登录系统查看申请详情
3. 检查：
   ✅ 用途明确（水稻施肥）
   ✅ 数量合理（50+30袋）
   ✅ 库存充足（复合肥500袋，尿素200袋）
   ✅ 附件完整（有施肥方案）
4. 审批决定：同意
5. 审批意见："申请合理，符合生产计划，库存充足，同意领用"
6. 通知渠道：系统消息
7. 确认审批
```

**审批结果**
```
- 申请状态：待审批 → 已通过（第1级）
- 待审批：财务主管（第2级）
- 通知申请人：第1级审批已通过
```

### 示例2：紧急大额申请审批

**申请信息**
```
申请单号：LY202410220002
申请人：李四（种植二队）
申请时间：2024-10-22 14:00
计划领用时间：2024-10-23（明天）
优先级：高 ⚠️
用途：紧急施肥作业，需尽快完成

物品清单：
- 复合肥 200袋 × ¥150 = ¥30,000
- 尿素 150袋 × ¥100 = ¥15,000
- 钾肥 100袋 × ¥120 = ¥12,000
总金额：¥57,000 💰

附件：紧急施肥方案.pdf、天气预报.png
```

**自动审批流程**
```
1. 系统判断：
   - 金额 ¥57,000（≥ ¥50,000）🔴
   - 物资类型：肥料
   - 优先级：高 ⚠️
   
2. 审批规则：
   - 审批等级：3级（最高级）
   - 审批人：总经理、财务主管、生产队长
   
3. 发送通知：
   - 渠道：系统消息 + 短信（紧急）
   - 对象：总经理、财务主管、生产队长
   - 内容：【紧急审批】⚠️
```

**审批人操作（总经理）**
```
1. 收到短信 + 系统消息
2. 立即登录系统查看
3. 检查：
   ✅ 紧急需求合理（天气原因）
   ✅ 金额较大，需要关注
   ⚠️ 数量较多，建议适当调整
4. 审批决定：修改
5. 调整数量：
   - 复合肥：200袋 → 180袋
   - 尿素：150袋 → 120袋
   - 钾肥：100袋 → 80袋
6. 审批意见："考虑库存压力，建议适当调整数量。已调整为180+120+80袋，总金额约¥48,000，请申请人确认"
7. 通知渠道：系统消息 + 短信
8. 确认审批
```

**审批结果**
```
- 申请状态：待审批 → 已修改
- 通知申请人：申请需要修改
- 修改内容：数量调整详情
- 下一步：申请人确认修改
```

### 示例3：特殊物资申请审批

**申请信息**
```
申请单号：LY202410220003
申请人：王五（种植三队）
申请时间：2024-10-22 10:15
计划领用时间：2024-10-24
优先级：中
用途：2号田块玉米除草作业

物品清单：
- 除草剂（农药）30瓶 × ¥50 = ¥1,500 🔴

附件：除草方案.pdf、安全防护措施.pdf
```

**自动审批流程**
```
1. 系统判断：
   - 金额 ¥1,500（< ¥10,000）
   - 物资类型：农药 🔴（特殊物资）
   - 优先级：中
   
2. 审批规则：
   - 基础审批：1级（生产队长）
   - 特殊审批：+仓库管理员（农药管理）
   
3. 审批人：
   - 生产队长
   - 仓库管理员
   
4. 发送通知：
   - 渠道：系统消息
   - 对象：生产队长、仓库管理员
   - 提示：特殊物资（农药）需额外审批
```

**审批人操作（仓库管理员）**
```
1. 收到系统消息
2. 查看申请详情
3. 特殊检查（农药管理）：
   ✅ 附件包含安全防护措施
   ✅ 用途明确（除草）
   ✅ 数量合理（30瓶）
   ✅ 符合农药使用规定
4. 审批决定：同意
5. 审批意见："已查看安全防护措施，符合农药使用规定，同意领用。领用时需做好防护，注意安全"
6. 通知渠道：系统消息
7. 确认审批
```

## 🎓 最佳实践

### 审批人角度

**1. 及时处理**
- 收到通知后尽快查看
- 紧急申请优先处理
- 避免影响生产进度

**2. 仔细审核**
- 查看申请用途是否合理
- 核对库存是否充足
- 检查附件是否完整
- 评估金额是否合理

**3. 明确意见**
- 同意：说明同意理由
- 驳回：详细说明驳回原因
- 修改：清楚说明修改建议

**4. 选择合适的通知方式**
- 普通审批：系统消息即可
- 紧急审批：系统消息 + 短信
- 重要调整：增加邮件通知

### 申请人角度

**1. 清晰填写**
- 用途说明要详细
- 数量要准确
- 附件要完整

**2. 合理申请**
- 根据实际需求申请
- 避免过量申请
- 注意库存情况

**3. 及时响应**
- 收到修改意见及时确认
- 收到驳回及时修改重提
- 保持沟通畅通

## 📈 数据统计

### 审批效率指标

| 指标 | 说明 |
|------|------|
| 平均审批时长 | 从提交到审批完成的平均时间 |
| 审批通过率 | 通过的申请占总申请的比例 |
| 一次通过率 | 第一次提交即通过的比例 |
| 驳回率 | 被驳回的申请占总申请的比例 |
| 修改率 | 需要修改的申请占总申请的比例 |

### 审批人工作量

| 指标 | 说明 |
|------|------|
| 待审批数量 | 当前待处理的审批数 |
| 今日已审批 | 今天已处理的审批数 |
| 本周已审批 | 本周已处理的审批数 |
| 平均处理时间 | 每个审批的平均处理时长 |

## ⚙️ 系统配置

### 审批规则配置

管理员可以配置审批规则：

```typescript
审批规则配置 {
  金额阈值: {
    一级审批上限: 10000,
    二级审批上限: 50000,
    三级审批起点: 50000
  },
  
  审批人配置: {
    一级审批人: ["生产队长"],
    二级审批人: ["生产队长", "财务主管"],
    三级审批人: ["总经理", "财务主管", "生产队长"]
  },
  
  特殊物资规则: {
    农药: ["仓库管理员"],
    化肥: ["仓库管理员"],
    种子: ["技术主管"]
  },
  
  紧急申请: {
    通知渠道: ["系统消息", "短信"],
    优先级: "高",
    提醒频率: "立即"
  }
}
```

### 通知渠道配置

```typescript
通知配置 {
  系统消息: {
    启用: true,
    模板: "【物资领用审批】您有新的审批申请待处理"
  },
  
  短信通知: {
    启用: true,
    仅紧急申请: true,
    模板: "【紧急审批】您有紧急审批待处理，申请单号：{code}"
  },
  
  邮件通知: {
    启用: false,
    抄送: ["admin@example.com"]
  },
  
  微信推送: {
    启用: false,
    企业微信: true
  }
}
```

## 🔐 权限控制

### 审批权限

| 角色 | 权限 |
|------|------|
| 生产队长 | 审批金额 < ¥50,000 的申请 |
| 财务主管 | 审批金额 ≥ ¥10,000 的申请 |
| 总经理 | 审批所有金额的申请 |
| 仓库管理员 | 审批特殊物资（农药/化肥） |
| 技术主管 | 审批特殊物资（种子） |

### 操作权限

| 操作 | 申请人 | 审批人 | 管理员 |
|------|--------|--------|--------|
| 提交申请 | ✅ | ❌ | ✅ |
| 查看申请 | ✅ | ✅ | ✅ |
| 审批申请 | ❌ | ✅ | ✅ |
| 修改审批 | ❌ | ❌ | ✅ |
| 查看历史 | ✅ | ✅ | ✅ |
| 导出记录 | ❌ | ✅ | ✅ |

## 📝 常见问题

**Q1: 审批人不在怎么办？**
A: 系统支持设置代理审批人，审批人可以委托其他人代为审批。

**Q2: 审批错了可以撤销吗？**
A: 普通审批人不能撤销，需要联系管理员撤销。管理员可以撤销审批并重新审批。

**Q3: 多级审批的顺序是什么？**
A: 系统支持并行审批，所有审批人同时收到通知，任何人都可以先审批。

**Q4: 修改后的数量如果申请人不同意怎么办？**
A: 申请人可以选择：
   - 接受修改，继续流程
   - 拒绝修改，重新提交新申请

**Q5: 审批历史能保存多久？**
A: 所有审批记录永久保存，作为审计依据。

## 🎯 技术实现

### 核心代码

```typescript
// 触发审批流程
const triggerApprovalWorkflow = (totalAmount, items) => {
  // 1. 判断金额等级
  let approvalLevel = 1;
  let approvers = [];
  
  if (totalAmount >= 50000) {
    approvalLevel = 3;
    approvers = ['总经理', '财务主管', '生产队长'];
  } else if (totalAmount >= 10000) {
    approvalLevel = 2;
    approvers = ['财务主管', '生产队长'];
  } else {
    approvalLevel = 1;
    approvers = ['生产队长'];
  }
  
  // 2. 检查特殊物资
  const hasSpecialMaterial = items.some(item => 
    item.materialType === '农药' || item.materialType === '化肥'
  );
  
  if (hasSpecialMaterial) {
    approvers.push('仓库管理员');
  }
  
  // 3. 发送通知
  sendNotification(approvers, isUrgent);
  
  return { approvers, approvalLevel };
};

// 处理审批
const handleApprove = (action: ApprovalAction) => {
  // 验证
  if (!approvalFormData.comments.trim()) {
    toast.error('请填写审批意见');
    return;
  }
  
  // 记录审批
  const approvalRecord = {
    requisitionCode: selectedRequisition?.code,
    approver: '当前审批人',
    action,
    comments: approvalFormData.comments,
    date: new Date().toLocaleString('zh-CN'),
    modifiedItems: action === '修改' ? approvalFormData.modifiedItems : undefined,
  };
  
  // 通知申请人
  notifyApplicant(approvalRecord);
  
  // 成功提示
  toast.success(`已${actionText}该申请`);
};
```

---

**文档版本**: v1.0  
**更新日期**: 2024-10-22  
**功能状态**: ✅ 已完成并测试通过  
**相关文档**: 
- 领用申请指南: `REQUISITION_APPLICATION_GUIDE.md`
- 快速测试: `APPROVAL_QUICK_TEST.md`
