# multi-instruction-plugin
**Repository Path**: chenqian1995/multi-instruction-plugin
## Basic Information
- **Project Name**: multi-instruction-plugin
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-29
- **Last Updated**: 2026-03-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 多指令下发插件
> 可插拔的车辆 CAN 文件串行下发系统 - 零侵入集成
[](LICENSE)
[](https://openjdk.java.net/)
[](https://spring.io/projects/spring-boot)
## 项目简介
多指令下发插件是一个**独立可插拔**的 Maven 模块,为车辆 TSP 系统提供:
- ✅ 批量指令串行执行(一次一条)
- ✅ 9 种指令状态管理
- ✅ Redis ZSet 超时调度(3 分钟/2 小时/24 小时)
- ✅ 分布式锁防止并发
- ✅ 定时任务轮询(每 3 秒)
- ✅ 零侵入集成(只需添加依赖和注解)
## 快速开始
### 1. Maven 依赖
```xml
com.cloudplatform
multi-instruction-plugin
1.0.0
```
### 2. 启用插件
```java
@SpringBootApplication
@EnableMultiInstructionPlugin // ← 添加此注解
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
```
### 3. 配置文件
```yaml
multi-instruction:
enabled: true
scheduler-interval-ms: 3000
command-exec-timeout-ms: 180000
offline-interrupt-threshold-ms: 7200000
global-issue-timeout-ms: 86400000
redis:
key-prefix: "plugin:cmd:"
```
### 4. 使用示例
```java
@Service
public class YourService {
@Autowired
private MultiCommandPluginService pluginService;
public void issueFiles() {
pluginService.issueCommands(
"VIN123456",
Arrays.asList("/file1.can", "/file2.can")
);
}
}
```
## 核心特性
### 指令状态机
```
INIT(0) → WAIT_TRANSFER(3) → FILE_TRANSFERRING(4) → SUCCESS(1)/FAIL(2)
↓
TRANSFER_PAUSED_OFFLINE(5)
↓
TRANSFER_INTERRUPTED_OFFLINE_2H(6)
↓
TRANSFER_INTERRUPTED_TIMEOUT(7)
↓
ISSUE_TIMEOUT_24H(8)
```
### 超时管理
| 类型 | 时间 | 说明 |
|------|------|------|
| 3 分钟超时 | 180s | 指令执行超时,设备响应超时 |
| 2 小时离线 | 7200s | 设备离线超过 2 小时,指令中断 |
| 24 小时全局 | 86400s | 指令排队等待超过 24 小时 |
## 技术栈
- **Java**: 8+
- **Spring Boot**: 2.7.x
- **MyBatis**: 2.3.1
- **Redis**: 5.0+
- **Redisson**: 3.21.3
## 文档
- [集成指南](INTEGRATION_GUIDE.md) - 详细集成步骤
- [配置说明](INTEGRATION_GUIDE.md#配置说明) - 所有配置项说明
- [故障排查](INTEGRATION_GUIDE.md#故障排查) - 常见问题解决
## 项目结构
```
multi-instruction-plugin/
├── src/main/java/com/cloudplatform/plugin/multiinstruction/
│ ├── autoconfig/ # 自动配置
│ ├── core/ # 核心调度逻辑
│ ├── service/ # 服务层
│ ├── mapper/ # MyBatis Mapper
│ ├── entity/ # 实体类
│ └── util/ # 工具类
└── src/main/resources/
└── mapper/ # MyBatis XML
```
## 自定义扩展
### 自定义在线检测
```java
@Configuration
public class YourConfig {
@Bean
public VehicleOnlineChecker vehicleOnlineChecker() {
return vin -> {
// 实现你的在线检测逻辑
return yourMqttService.isOnline(vin);
};
}
}
```
### 禁用插件
```yaml
multi-instruction:
enabled: false
```
## 与其他方案对比
| 特性 | 插件版本 | 原项目代码 |
|------|---------|-----------|
| 侵入性 | 零侵入 | 需修改代码 |
| 可插拔 | ✅ 是 | ❌ 否 |
| 独立升级 | ✅ 是 | ❌ 否 |
| 跨项目复用 | ✅ 简单 | ❌ 困难 |
## 开发计划
- [ ] 增加指令优先级支持
- [ ] 增加指令重试机制
- [ ] 增加指令执行日志
- [ ] 支持更多超时策略
- [ ] 提供管理接口(暂停/恢复/取消指令)
## 贡献
欢迎提交 Issue 和 Pull Request!
## License
MIT License
---
**Gitee**: https://gitee.com/chenqian1995/multi-instruction-plugin
## 模块结构
```
cloud-platform-multiple-instruction-plugin/
├── pom.xml
├── README.md
└── src/
├── main/
│ ├── java/com/cloudplatform/plugin/multiinstruction/
│ │ ├── autoconfig/ # 自动配置
│ │ │ ├── MultiInstructionAutoConfiguration.java
│ │ │ └── RedisConfig.java
│ │ ├── core/ # 核心逻辑
│ │ │ ├── CommandScheduler.java
│ │ │ ├── CommandExecutor.java
│ │ │ └── TimeoutHandler.java
│ │ ├── service/ # 服务层
│ │ │ ├── MultiCommandPluginService.java
│ │ │ └── VehicleOnlineChecker.java
│ │ ├── mapper/ # MyBatis Mapper
│ │ │ └── CommandMapper.java
│ │ ├── entity/ # 实体类
│ │ │ └── CommandEntity.java
│ │ └── util/ # 工具类
│ │ ├── TimeoutManager.java
│ │ └── StatusRemarkBuilder.java
│ └── resources/
│ ├── mapper/
│ │ └── CommandMapper.xml
│ └── application-plugin.yml # 插件配置模板
└── test/
└── java/.../
└── PluginIntegrationTest.java
```
## 集成方式
### 方式 1:Maven 依赖(推荐)
**原项目 pom.xml 添加依赖**:
```xml
com.cloudplatform
multi-instruction-plugin
1.0.0
```
**原项目启动类添加注解**:
```java
@SpringBootApplication
@EnableMultiInstructionPlugin // 启用插件
public class OriginalApplication {
public static void main(String[] args) {
SpringApplication.run(OriginalApplication.class, args);
}
}
```
**原项目 application.yml 添加配置**:
```yaml
multi-instruction:
enabled: true
scheduler-interval-ms: 3000
# ... 其他配置
```
### 方式 2:源码复制
将 `src/main/java/com/cloudplatform/plugin/multiinstruction` 整个目录复制到原项目的 `src/main/java` 下。
## 插件功能
### 1. 自动配置
```java
@Configuration
@ConditionalOnProperty(prefix = "multi-instruction", name = "enabled", havingValue = "true")
@EnableScheduling
public class MultiInstructionAutoConfiguration {
@Bean
public CommandScheduler commandScheduler() {
return new CommandScheduler();
}
@Bean
public TimeoutManager timeoutManager() {
return new TimeoutManager();
}
// ... 其他 Bean
}
```
### 2. 可配置项
```yaml
multi-instruction:
enabled: true # 是否启用插件
scheduler-interval-ms: 3000 # 定时任务间隔
command-exec-timeout-ms: 180000 # 3 分钟执行超时
offline-interrupt-threshold-ms: 7200000 # 2 小时离线中断
global-issue-timeout-ms: 86400000 # 24 小时全局超时
redis:
key-prefix: "plugin:cmd:" # Redis key 前缀
```
### 3. 接口调用
```java
@Service
public class BusinessService {
@Autowired
private MultiCommandPluginService pluginService;
public void doSomething() {
// 下发指令
pluginService.issueCommands("VIN123", Arrays.asList("/file1.can", "/file2.can"));
// 查询状态
List commands = pluginService.listByVin("VIN123");
}
}
```
## 依赖关系
```xml
org.springframework.boot
spring-boot-starter
2.7.18
provided
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.3.1
provided
org.springframework.boot
spring-boot-starter-data-redis
2.7.18
provided
org.redisson
redisson-spring-boot-starter
3.21.3
compile
```
## 优势
1. **零侵入** - 原项目只需添加依赖和配置
2. **可插拔** - 配置 `enabled: false` 即可禁用
3. **独立测试** - 插件有独立的测试用例
4. **版本管理** - 插件可独立升级
5. **复用性强** - 其他项目也可以引用
## 下一步
1. 创建独立插件模块
2. 迁移核心代码到插件
3. 编写插件集成测试
4. 发布到 Maven 仓库(或本地安装)