Appearance
任务执行引擎
**本文引用的文件** - [JobConstant.java](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/constant/JobConstant.java) - [DeviceEnum.java](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/enums/DeviceEnum.java) - [LemesJobDeviceMateServerApplication.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/LemesJobDeviceMateServerApplication.java) - [DemoJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/DemoJob.java) - [LeMesSendJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/LeMesSendJob.java) - [MpCreatWotJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/MpCreatWotJob.java) - [SpCreatWotJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/SpCreatWotJob.java) - [HjSpCreatWotJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/HjSpCreatWotJob.java) - [LpCreatWotJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/LpCreatWotJob.java) - [MeasurePlanRemindJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/MeasurePlanRemindJob.java) - [SpDelayRemindJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/SpDelayRemindJob.java) - [MpDelayRemindJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/MpDelayRemindJob.java) - [HjSpDelayRemindJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/HjSpDelayRemindJob.java) - [MpLevelCloseWotJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/MpLevelCloseWotJob.java) - [SyncFlowUserJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/SyncFlowUserJob.java) - [SyncUserFromEomJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/SyncUserFromEomJob.java) - [SyncRepairToMttrJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/SyncRepairToMttrJob.java) - [StockValueStatisticsJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/StockValueStatisticsJob.java) - [PasteGlueJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/PasteGlueJob.java) - [MctKafkaJob.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/handler/MctKafkaJob.java) - [DeviceSchedulerListener.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/listener/DeviceSchedulerListener.java) - [KafkaTestController.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/controller/KafkaTestController.java) - [application.yml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/application.yml) - [bootstrap.yml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/bootstrap.yml) - [logback.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/logback.xml) - [ValidationMessages.properties](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/ValidationMessages.properties) - [messages_zh_CN.properties](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/messages_zh_CN.properties) - [messages_en_US.properties](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/messages_en_US.properties) - [MaintenanceTasksMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/MaintenanceTasksMapper.xml) - [RepairWorkOrdersMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/RepairWorkOrdersMapper.xml) - [FlowUserMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/FlowUserMapper.xml) - [SysFactoryMapper.java](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/mapper/SysFactoryMapper.java) - [SysFactoryService.java](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/service/SysFactoryService.java) - [SysFactoryServiceImpl.java](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/service/impl/SysFactoryServiceImpl.java) - [SysFactory.java](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/entity/SysFactory.java) - [FlowClient.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/feign/FlowClient.java) - [FlowHystrixFallBack.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/fallback/FlowHystrixFallBack.java) - [MacTestClient.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/feign/MacTestClient.java) - [MacTestClientFallback.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/fallback/MacTestClientFallback.java) - [AsyncPoolConfig.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/common/AsyncPoolConfig.java) - [ServiceResponse.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/common/ServiceResponse.java) - [WebLogAspect.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/common/WebLogAspect.java) - [WebSecurityConfig.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/common/WebSecurityConfig.java) - [DeviceDowntimeRateMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/DeviceDowntimeRateMapper.xml) - [DeviceMttrMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/DeviceMttrMapper.xml) - [NabfconfigMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/NabfconfigMapper.xml) - [StoreBinMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/StoreBinMapper.xml) - [GlobalSerialMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/GlobalSerialMapper.xml) - [ExceptionItemsMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/ExceptionItemsMapper.xml) - [PasteGlueStationRecordsMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/PasteGlueStationRecordsMapper.xml) - [StockValueStatisticsMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/StockValueStatisticsMapper.xml)目录
引言
本技术文档围绕 DeviceMate 任务执行引擎展开,系统性阐述任务创建、指派、转办与回退机制,任务状态管理、超时处理与优先级控制,任务与用户权限的关联、审批流程与决策机制,以及任务查询接口、批量操作与状态同步的实现方案。同时给出性能优化、并发控制与异常处理策略,帮助读者快速理解并高效使用该引擎。
项目结构
DeviceMate 任务执行引擎由“作业调度公共模块”与“作业执行器服务”两大部分组成:
- 公共模块:提供常量、枚举、实体、Mapper 接口与服务接口等通用能力,支撑各类作业的统一规范与扩展。
- 执行器服务:承载具体作业处理器(如工单创建、提醒、统计、用户同步等),通过监听器触发调度,结合 Kafka、数据库与外部工作流服务协同完成任务生命周期管理。
图表来源
- LemesJobDeviceMateServerApplication.java:1-200
- DeviceSchedulerListener.java:1-200
- DemoJob.java:1-200
- MpCreatWotJob.java:1-200
- SpCreatWotJob.java:1-200
- HjSpCreatWotJob.java:1-200
- LpCreatWotJob.java:1-200
- MeasurePlanRemindJob.java:1-200
- SpDelayRemindJob.java:1-200
- MpDelayRemindJob.java:1-200
- HjSpDelayRemindJob.java:1-200
- MpLevelCloseWotJob.java:1-200
- SyncFlowUserJob.java:1-200
- SyncUserFromEomJob.java:1-200
- SyncRepairToMttrJob.java:1-200
- StockValueStatisticsJob.java:1-200
- PasteGlueJob.java:1-200
- MctKafkaJob.java:1-200
- MaintenanceTasksMapper.xml:1-200
- RepairWorkOrdersMapper.xml:1-200
- FlowUserMapper.xml:1-200
- FlowClient.java:1-200
- FlowHystrixFallBack.java:1-200
- MacTestClient.java:1-200
- MacTestClientFallback.java:1-200
- application.yml:1-200
- bootstrap.yml:1-200
- logback.xml:1-200
- ValidationMessages.properties:1-200
- messages_zh_CN.properties:1-200
- messages_en_US.properties:1-200
章节来源
核心组件
- 常量与枚举:提供统一的任务类型、设备类型、计划类型、状态码、时间单位等基础定义,确保跨模块一致性。
- 实体与Mapper:封装设备、工单、用户、工厂等数据模型及持久化接口,支撑作业对业务数据的读写。
- 服务层:抽象工厂、用户、字典等服务接口与实现,为作业提供可插拔的数据访问能力。
- 作业处理器:覆盖工单创建、提醒、统计、用户同步、Kafka消息处理等场景,按职责拆分,便于扩展与维护。
- 配置与资源:应用配置、引导配置、日志配置、国际化消息等,保障运行环境与可观测性。
章节来源
- JobConstant.java:1-23
- DeviceEnum.java:1-93
- SysFactory.java:1-200
- SysFactoryMapper.java:1-200
- SysFactoryService.java:1-200
- SysFactoryServiceImpl.java:1-200
架构总览
任务执行引擎采用“监听器触发 + 多作业处理器 + 工作流集成 + 数据持久化”的架构模式:
- 监听器负责接收调度事件或定时触发;
- 作业处理器根据业务规则执行任务(创建工单、发送提醒、同步用户、统计指标等);
- 通过 Feign 客户端调用工作流服务进行审批与状态推进;
- 使用 MyBatis 进行数据持久化,配合 Mapper XML 定义 SQL;
- 配置文件提供运行参数、连接信息与国际化支持。
图表来源
- DeviceSchedulerListener.java:1-200
- FlowClient.java:1-200
- FlowHystrixFallBack.java:1-200
- MaintenanceTasksMapper.xml:1-200
- application.yml:1-200
详细组件分析
任务创建与指派
- 工单创建类作业:针对不同保养类型(主保养、辅保养、换热器、线体)分别实现创建逻辑,依据设备类型与计划类型生成工单,并设置初始状态与优先级。
- 指派与权限:通过工作流服务的用户同步与角色服务,将具备相应权限的人员纳入审批/执行候选集,避免越权操作。
- 转办与回退:利用工作流服务的节点流转能力,在审批环节支持转办与回退,作业侧仅负责触发与状态推进。
图表来源
- MpCreatWotJob.java:1-200
- SpCreatWotJob.java:1-200
- HjSpCreatWotJob.java:1-200
- LpCreatWotJob.java:1-200
- FlowClient.java:1-200
章节来源
- MpCreatWotJob.java:1-200
- SpCreatWotJob.java:1-200
- HjSpCreatWotJob.java:1-200
- LpCreatWotJob.java:1-200
- FlowClient.java:1-200
任务状态管理与超时处理
- 状态机:以枚举形式定义任务状态(如进行中、已完成、已关闭、已延期),作业在执行过程中更新状态并持久化。
- 超时策略:通过延时提醒类作业定期扫描即将到期或已超时的任务,推送提醒消息至消息队列,驱动后续处理。
- 关闭与归档:针对低优先级或长时间未处理的任务,提供自动关闭流程,释放资源。
图表来源
- DeviceEnum.java:1-93
- MpDelayRemindJob.java:1-200
- SpDelayRemindJob.java:1-200
- HjSpDelayRemindJob.java:1-200
- MpLevelCloseWotJob.java:1-200
章节来源
- DeviceEnum.java:1-93
- MpDelayRemindJob.java:1-200
- SpDelayRemindJob.java:1-200
- HjSpDelayRemindJob.java:1-200
- MpLevelCloseWotJob.java:1-200
优先级控制与批量操作
- 优先级来源:设备类型、保养级别、紧急程度等维度综合评估,形成优先级标签,用于排序与资源分配。
- 批量操作:通过批处理作业对多条任务进行统一处理(如批量创建、批量提醒、批量同步),减少重复开销。
- 并发控制:使用异步线程池与限流策略,避免高并发下系统抖动;对关键作业采用分布式锁或幂等设计。
章节来源
任务与用户权限的关联、审批流程与决策机制
- 权限同步:通过用户同步作业从上游系统拉取用户与角色信息,保证作业执行者具备相应权限。
- 审批流程:借助工作流服务的节点配置与审批人选择,实现多级审批与会签;作业侧负责推进流程与回写状态。
- 决策机制:基于规则引擎或条件判断(如设备状态、历史维修记录、库存情况)决定是否需要审批、谁来审批。
图表来源
章节来源
任务查询接口、批量操作与状态同步
- 查询接口:通过服务层接口与控制器暴露查询能力,支持按设备、工单号、状态、时间范围等条件过滤。
- 批量操作:提供批量更新、批量删除、批量导出等功能,提升运维效率。
- 状态同步:与工作流服务保持状态一致,通过回调或轮询方式同步审批结果与最终状态。
章节来源
性能优化、并发控制与异常处理策略
- 性能优化:SQL 优化、索引设计、缓存命中率提升、批处理与异步化;对热点数据进行分片与读写分离。
- 并发控制:线程池隔离、信号量/限流、分布式锁、幂等设计;对高频作业进行限速与排队。
- 异常处理:统一异常捕获与降级(如工作流熔断)、重试与死信队列、告警与追踪(TraceId)。
章节来源
依赖关系分析
- 模块内聚:作业处理器内部职责单一,依赖服务层与 Mapper 层,降低耦合度。
- 模块间耦合:执行器服务依赖公共模块提供的实体与枚举,同时通过 Feign 客户端与工作流服务交互。
- 外部依赖:Kafka、数据库、工作流服务、配置中心与注册中心等基础设施。
图表来源
章节来源
性能考虑
- 数据库层面:合理设计索引、分页查询、批量写入、慢查询分析与优化。
- 缓存策略:热点数据缓存、本地缓存与分布式缓存结合,降低数据库压力。
- 异步化:将非阻塞任务异步化,使用线程池与消息队列解耦。
- 并发与限流:对高频作业进行限流与排队,避免雪崩效应。
- 监控与追踪:埋点与链路追踪,定位性能瓶颈。
故障排查指南
- 日志与追踪:检查应用日志与工作流日志,确认作业执行路径与异常栈;使用 TraceId 进行端到端追踪。
- 配置校验:核对 application.yml 与 bootstrap.yml 中的连接串、线程池与超时参数。
- 降级与容错:当工作流服务不可用时,确认降级策略是否生效,避免级联故障。
- 数据一致性:核对数据库与消息队列状态,必要时进行补偿与重放。
章节来源
结论
DeviceMate 任务执行引擎通过清晰的模块划分、标准化的作业处理器与完善的工作流集成,实现了从任务创建、指派、审批到执行与监控的全生命周期管理。依托统一的常量与枚举体系、完善的权限与状态管理、以及健壮的异常处理与性能优化策略,能够稳定支撑复杂业务场景下的任务编排与执行。
附录
- 国际化资源:messages_zh_CN.properties 与 messages_en_US.properties 提供多语言支持。
- 测试与验证:可通过 KafkaTestController 进行消息收发测试,辅助验证作业链路。
章节来源