# BMISS 第三方请求 Java 模块

## 概述

本项目是 BMISS 机器人系统的第三方请求 Java 实现模块，基于原有的 Python 第三方请求框架进行迁移和重构。

## 模块结构

```
module/base/src/main/java/com/ssyf/third/bmiss/
├── core/           # 核心模块
│   ├── EncryptionManager.java    # 加解密管理
│   ├── RequestManager.java       # 请求管理
│   └── ConfigManager.java        # 配置管理
├── services/       # 业务服务
│   ├── BusinessService.java      # 业务API服务
│   └── DingTalkService.java      # 钉钉服务
├── utils/          # 工具类
│   ├── Logger.java               # 日志工具
│   └── Validator.java            # 验证工具
├── adapters/       # 适配器
│   └── LegacyAdapter.java        # 原有代码适配器
└── model/          # 数据模型
    └── ApiResponse.java          # API响应模型
```

## 快速开始

### 1. 环境要求

- Java 8+
- Spring Boot 2.x
- Maven 3.6+

### 2. 依赖配置

在 `pom.xml` 中添加依赖：

```xml
<dependency>
    <groupId>com.ssyf.third</groupId>
    <artifactId>bmiss-module</artifactId>
    <version>1.0.0</version>
</dependency>
```

### 3. 基本使用

#### 初始化配置

```java
@Configuration
public class BmissConfig {
    
    @Bean
    public EncryptionManager encryptionManager() {
        EncryptionManager manager = new EncryptionManager();
        manager.setSecretKey("your-secret-key");
        manager.setEncryptionEnabled(true);
        return manager;
    }
    
    @Bean
    public RequestManager requestManager() {
        RequestManager manager = new RequestManager();
        manager.setEncryptionManager(encryptionManager());
        manager.setMaxRetries(3);
        manager.setTimeout(5000);
        return manager;
    }
    
    @Bean
    public BusinessService businessService() {
        BusinessService service = new BusinessService();
        service.setRequestManager(requestManager());
        service.setBaseUrl("https://api.bmiss.com");
        return service;
    }
}
```

#### 使用业务服务

```java
@Service
public class MyService {
    
    @Autowired
    private BusinessService businessService;
    
    public void handleLiveRoom() {
        // 登录
        ApiResponse loginResponse = businessService.login("username", "password");
        
        if (loginResponse.isSuccess()) {
            // 获取直播间信息
            ApiResponse roomInfo = businessService.getLiveRoomInfo("room123");
            
            // 开始直播间
            ApiResponse startResponse = businessService.startLiveRoom("room123");
            
            // 发送礼物
            ApiResponse giftResponse = businessService.sendGift("room123", "gift001", 1);
        }
    }
}
```

#### 使用钉钉服务

```java
@Service
public class NotificationService {
    
    @Autowired
    private DingTalkService dingTalkService;
    
    public void sendAlert(String message) {
        // 发送文本消息
        dingTalkService.sendTextMessage("机器人token", message);
        
        // 发送链接消息
        dingTalkService.sendLinkMessage("机器人token", "标题", "内容", "https://example.com", "https://example.com/thumb.jpg");
        
        // 发送Markdown消息
        dingTalkService.sendMarkdownMessage("机器人token", "标题", "# 内容\n- 项目1\n- 项目2");
    }
}
```

## 核心功能说明

### 1. 加解密管理 (EncryptionManager)

- **AES-CBC 加密/解密**：支持数据加密传输
- **双重MD5签名**：确保数据完整性
- **公共参数生成**：自动生成时间戳和签名
- **加密开关**：支持动态启用/禁用加密

### 2. 请求管理 (RequestManager)

- **HTTP请求封装**：支持 GET/POST/JSON POST
- **重试机制**：可配置最大重试次数
- **超时控制**：连接和读取超时设置
- **加密请求处理**：自动处理加密请求
- **响应解析**：统一响应格式处理

### 3. 业务服务 (BusinessService)

- **用户登录**：支持用户名密码登录
- **直播间管理**：开始/停止/暂停/恢复直播间
- **礼物赠送**：支持多种礼物类型
- **参数构建**：自动构建请求参数

### 4. 钉钉服务 (DingTalkService)

- **多种消息类型**：文本、链接、Markdown
- **错误通知**：自动发送错误通知
- **成功通知**：操作成功通知

## 配置说明

### 加密配置

```yaml
bmiss:
  encryption:
    enabled: true
    secret-key: "your-32-character-secret-key"
```

### 请求配置

```yaml
bmiss:
  request:
    max-retries: 3
    timeout: 5000
    base-url: "https://api.bmiss.com"
```

### 钉钉配置

```yaml
dingtalk:
  webhook: "https://oapi.dingtalk.com/robot/send"
  access-token: "your-access-token"
```

## 测试

项目包含完整的单元测试，可以使用以下命令运行测试：

```bash
mvn test
```

### 测试覆盖范围

- **EncryptionManagerTest**：加解密功能测试
- **RequestManagerTest**：请求管理功能测试
- **BusinessServiceTest**：业务服务功能测试
- **ValidatorTest**：验证工具功能测试

## 迁移指南

### 从 Python 迁移到 Java

1. **依赖替换**：将 Python 的 requests 库替换为 Java 的 HttpClient
2. **加密实现**：Python 的加密逻辑迁移到 Java 的 EncryptionManager
3. **配置管理**：Python 的配置文件迁移到 Java 的配置管理
4. **日志系统**：Python 的 logging 迁移到 Java 的 Logger 工具类

### 兼容性说明

项目提供了 `LegacyAdapter` 类，用于与原有 Python 代码的兼容性适配。

## 故障排除

### 常见问题

1. **加密失败**：检查密钥长度是否为 16/24/32 字节
2. **请求超时**：调整超时设置或检查网络连接
3. **签名验证失败**：检查时间戳和签名生成逻辑

### 日志查看

项目使用统一的日志系统，可以通过以下方式查看详细日志：

```java
Logger.debug("调试信息");
Logger.info("操作日志");
Logger.warn("警告信息");
Logger.error("错误信息");
```

## 版本历史

- **v1.0.0**：初始版本，完成核心功能迁移
- 支持基本的第三方请求功能
- 提供完整的加解密和验证机制
- 包含单元测试和使用文档

## 贡献

欢迎提交 Issue 和 Pull Request 来改进项目。

## 许可证

本项目基于 MIT 许可证开源。