# 线索值班配置系统技术架构文档

## 1. 架构设计

```mermaid
graph TD
    A[用户浏览器] --> B[Spring Boot Web层]
    B --> C[Service业务层]
    C --> D[MyBatis数据访问层]
    D --> E[MySQL数据库]
    
    B --> F[Thymeleaf模板引擎]
    C --> G[定时任务调度]
    C --> H[缓存层Redis]
    
    subgraph "前端层"
        B
        F
    end
    
    subgraph "业务层"
        C
        G
        H
    end
    
    subgraph "数据层"
        D
        E
    end
```

## 2. 技术描述

- **前端**：Thymeleaf@3.0 + Bootstrap@4.6 + jQuery@3.6 + LayUI@2.6
- **后端**：Spring Boot@2.5.14 + MyBatis@3.5 + Apache Shiro@1.10.1
- **数据库**：MySQL@8.0
- **缓存**：Redis@6.2（可选，用于分配算法优化）

## 3. 路由定义

| 路由 | 用途 |
|------|------|
| /system/dutyConfig | 值班配置管理主页面 |
| /system/dutyConfig/list | 获取值班配置列表数据 |
| /system/dutyConfig/add | 新增值班配置页面 |
| /system/dutyConfig/edit/{id} | 编辑值班配置页面 |
| /system/dutyConfig/save | 保存值班配置 |
| /system/dutyConfig/update | 更新值班配置 |
| /system/dutyConfig/remove/{ids} | 删除值班配置 |
| /system/dutyConfig/changeStatus | 修改配置状态 |
| /system/dutyConfig/getAvailableUsers | 获取可用用户列表 |
| /system/dutyConfig/statistics | 分配统计页面 |

## 4. API定义

### 4.1 核心API

值班配置管理相关接口

```
GET /system/dutyConfig/list
```

请求参数：
| 参数名称 | 参数类型 | 是否必填 | 描述 |
|----------|----------|----------|------|
| pageNum | int | false | 页码，默认1 |
| pageSize | int | false | 每页大小，默认10 |
| configName | string | false | 配置名称（模糊查询） |
| status | string | false | 状态：0-禁用，1-启用 |

响应数据：
| 参数名称 | 参数类型 | 描述 |
|----------|----------|------|
| code | int | 响应状态码 |
| msg | string | 响应消息 |
| rows | array | 配置列表数据 |
| total | int | 总记录数 |

```
POST /system/dutyConfig/save
```

请求参数：
| 参数名称 | 参数类型 | 是否必填 | 描述 |
|----------|----------|----------|------|
| configName | string | true | 配置名称 |
| startTime | string | true | 开始时间（HH:mm格式） |
| endTime | string | true | 结束时间（HH:mm格式） |
| userIds | string | true | 值班用户ID列表，逗号分隔 |
| status | string | true | 状态：0-禁用，1-启用 |
| remark | string | false | 备注信息 |

响应数据：
| 参数名称 | 参数类型 | 描述 |
|----------|----------|------|
| code | int | 响应状态码 |
| msg | string | 响应消息 |

示例请求：
```json
{
  "configName": "工作日白班",
  "startTime": "09:00",
  "endTime": "18:00",
  "userIds": "1,2,3,4",
  "status": "1",
  "remark": "工作日白班值班安排"
}
```

```
GET /system/dutyConfig/getAvailableUsers
```

响应数据：
| 参数名称 | 参数类型 | 描述 |
|----------|----------|------|
| code | int | 响应状态码 |
| data | array | 可用用户列表 |

用户对象结构：
| 参数名称 | 参数类型 | 描述 |
|----------|----------|------|
| userId | long | 用户ID |
| userName | string | 用户姓名 |
| loginName | string | 登录名 |
| status | string | 用户状态 |

## 5. 服务器架构图

```mermaid
graph TD
    A[Controller层] --> B[Service层]
    B --> C[Mapper层]
    C --> D[(MySQL数据库)]
    
    B --> E[分配算法服务]
    B --> F[缓存服务]
    E --> G[轮询分配器]
    E --> H[时间匹配器]
    
    subgraph "Web层"
        A
    end
    
    subgraph "业务层"
        B
        E
        F
    end
    
    subgraph "数据访问层"
        C
    end
    
    subgraph "算法组件"
        G
        H
    end
```

## 6. 数据模型

### 6.1 数据模型定义

```mermaid
erDiagram
    DUTY_CONFIG ||--o{ DUTY_CONFIG_USER : contains
    SYS_USER ||--o{ DUTY_CONFIG_USER : assigned
    DUTY_CONFIG ||--o{ CLEW_ASSIGN_LOG : generates
    SYS_USER ||--o{ CLEW_ASSIGN_LOG : receives
    
    DUTY_CONFIG {
        bigint id PK
        string config_name
        string start_time
        string end_time
        string status
        string remark
        datetime create_time
        datetime update_time
        string create_by
        string update_by
    }
    
    DUTY_CONFIG_USER {
        bigint id PK
        bigint config_id FK
        bigint user_id FK
        int sort_order
        datetime create_time
    }
    
    SYS_USER {
        bigint user_id PK
        string user_name
        string login_name
        string status
        datetime create_time
    }
    
    CLEW_ASSIGN_LOG {
        bigint id PK
        bigint clew_id
        bigint config_id FK
        bigint assigned_user_id FK
        datetime assign_time
        string assign_type
    }
```

### 6.2 数据定义语言

值班配置表（duty_config）
```sql
-- 创建值班配置表
CREATE TABLE duty_config (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    config_name VARCHAR(100) NOT NULL COMMENT '配置名称',
    start_time VARCHAR(5) NOT NULL COMMENT '开始时间（HH:mm）',
    end_time VARCHAR(5) NOT NULL COMMENT '结束时间（HH:mm）',
    status CHAR(1) DEFAULT '1' COMMENT '状态（0-禁用，1-启用）',
    remark VARCHAR(500) COMMENT '备注',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    create_by VARCHAR(64) COMMENT '创建者',
    update_by VARCHAR(64) COMMENT '更新者',
    del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志（0-正常，1-删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='值班配置表';

-- 创建值班配置用户关联表
CREATE TABLE duty_config_user (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    config_id BIGINT NOT NULL COMMENT '配置ID',
    user_id BIGINT NOT NULL COMMENT '用户ID',
    sort_order INT DEFAULT 0 COMMENT '排序顺序',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    INDEX idx_config_id (config_id),
    INDEX idx_user_id (user_id),
    FOREIGN KEY (config_id) REFERENCES duty_config(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='值班配置用户关联表';

-- 创建线索分配日志表
CREATE TABLE clew_assign_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    clew_id BIGINT COMMENT '线索ID',
    config_id BIGINT COMMENT '使用的配置ID',
    assigned_user_id BIGINT NOT NULL COMMENT '分配的用户ID',
    assign_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '分配时间',
    assign_type VARCHAR(20) DEFAULT 'AUTO' COMMENT '分配类型（AUTO-自动，MANUAL-手动）',
    remark VARCHAR(200) COMMENT '备注',
    INDEX idx_clew_id (clew_id),
    INDEX idx_assigned_user (assigned_user_id),
    INDEX idx_assign_time (assign_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='线索分配日志表';

-- 创建索引
CREATE INDEX idx_duty_config_time ON duty_config(start_time, end_time, status);
CREATE INDEX idx_duty_config_status ON duty_config(status, del_flag);

-- 插入初始数据
INSERT INTO duty_config (config_name, start_time, end_time,{"file_path": "/Users/clunt/java/RuoYi/.trae/documents/线索值班配置系统技术架构文档.md", "content": 