编辑 | blame | 历史 | 原始文档

inspectiontask 模块逻辑说明

1. 模块定位

inspectiontask 是一个围绕“定时生成巡检任务、人工录入巡检结果、扫码记录留痕”的业务模块。它把巡检计划、巡检单、二维码、扫码记录四类能力串成一条闭环。

核心目标有三个:

  1. 维护巡检计划,并通过 Quartz 定时触发。
  2. 生成巡检单,支持人工补录、编辑、导出、删除。
  3. 记录二维码与扫码行为,作为巡检现场的辅助台账。

2. 模块拆分

2.1 定时巡检任务

对应类:

  • TimingTaskController
  • TimingTaskService
  • TimingTaskServiceImpl
  • TimingTaskScheduler
  • TimingTaskJob
  • QuartzConfig

职责:

  • 维护巡检计划。
  • 计算首次执行时间和下次执行时间。
  • 把巡检计划注册到 Quartz。
  • 到点后自动生成巡检任务。

2.2 巡检任务记录

对应类:

  • InspectionTaskController
  • InspectionTaskService
  • InspectionTaskServiceImpl

职责:

  • 查询巡检任务列表。
  • 查看某个定时任务下的巡检记录。
  • 批量新增或编辑巡检任务。
  • 删除巡检任务及其关联附件。

2.3 二维码管理

对应类:

  • QrCodeController
  • QrCodeService
  • QrCodeServiceImpl

职责:

  • 维护二维码基础信息。
  • 提供列表、增改、删除能力。

2.4 扫码记录管理

对应类:

  • QrCodeScanRecordController
  • QrCodeScanRecordService
  • QrCodeScanRecordServiceImpl

职责:

  • 记录二维码扫码行为。
  • 关联二维码信息与附件信息。
  • 支持列表、增改、删除。

3. 主业务流程

3.1 定时任务创建与启停

前端通过 POST /timingTask/addOrEditTimingTask 创建或修改巡检计划。

后端处理顺序是:

  1. 复制请求数据到 TimingTask
  2. 根据选择的设备列表补齐任务名称、区域、设备串等信息。
  3. 计算首次执行时间。
  4. 保存到数据库。
  5. 同步 Quartz 调度状态。

如果后续调用 POST /timingTask/changeEnable

  1. 先更新数据库里的启用状态。
  2. 再重新注册或刷新 Quartz 触发器。
  3. 启用时恢复执行,禁用时暂停执行。

删除时会先删除数据库记录,再从 Quartz 中取消对应任务。

3.2 定时生成巡检单

Quartz 到点后触发 TimingTaskJob

执行逻辑是:

  1. 通过任务 ID 读取当前巡检计划。
  2. 如果任务已禁用,直接退出。
  3. 解析该任务绑定的设备列表。
  4. 按设备逐个生成巡检单。
  5. 按设备数量决定生成次数。
  6. 写入 inspection_task
  7. 更新该定时任务的最后执行时间和下次执行时间。

这一步是模块的核心自动化入口。

3.3 巡检单人工录入与异常联动

前端通过 POST /inspectionTask/addOrEditInspectionTask 批量提交巡检单。

后端逻辑是:

  1. 逐条保存或更新巡检单。
  2. 若巡检结果为异常,则按区域收集异常任务。
  3. 同一批提交里,同一区域只保留一条异常记录用于后续生成维修单。
  4. 在当天范围内,如果该区域已经存在待维修单,则跳过,避免重复生成。
  5. 如果不存在,则自动创建一条维修单。

因此,这个模块不仅保存巡检结果,还承担“巡检异常 -> 自动生成维修任务”的联动职责。

3.4 巡检单列表展示

巡检单列表接口会做一次“按定时任务聚合”的整理,而不是简单返回数据库原始行。

聚合逻辑大致是:

  1. 按定时任务 ID 归组。
  2. 同一组里只返回一条代表记录。
  3. 合并任务名称、巡检人、备注、地点、频率等展示信息。
  4. 合并该组下的附件列表。
  5. 按定时任务和创建时间排序后分页返回。

所以列表页看到的是“业务视角的巡检任务卡片”,不是逐条底层记录。

3.5 巡检记录按定时任务查询

GET /timingTask/recordList/{timingId} 会查询某个定时任务在当天生成的巡检记录。

这里的范围限定为当天,是为了让页面查看“今日执行情况”更直接。

3.6 二维码与扫码记录

二维码模块只负责二维码本身的增删改查。

扫码记录模块负责把扫码行为、扫码人、二维码信息、附件信息串起来:

  1. 先分页查扫码记录。
  2. 再批量查关联二维码。
  3. 再批量查关联附件。
  4. 再查附件对应的文件元数据。
  5. 最后组装成前端可直接展示的 DTO。

它的角色更像“巡检现场的辅助留痕模块”。

4. 调度与时间计算

4.1 Quartz 接入方式

QuartzConfig 提供了 SchedulerFactoryBeanScheduler,并通过自定义 JobFactory 支持 Job 内部自动注入 Spring 依赖。

TimingTaskScheduler 负责:

  • 创建 JobDetail。
  • 创建 Trigger。
  • 重新调度。
  • 暂停、恢复、删除任务。

4.2 支持的频率类型

代码里支持的频率类型包括:

  • DAILY
  • WEEKLY
  • MONTHLY
  • QUARTERLY
  • YEARLY

时间表达式由服务层和调度层共同解析,最终转换为 Quartz cron。

4.3 需要注意的实现细节

  1. 服务层和 Job 层都各自实现了一套“下次执行时间”计算逻辑。
  2. Job 层执行完后,会直接更新 timing_task 的最后执行时间和下次执行时间。
  3. 服务层在新增任务时会先计算首次执行时间,但季度类型在当前实现里首次时间计算方法为空,属于一个需要注意的实现缺口。

5. 数据与关联关系

这个模块的主要关联关系可以理解为:

  • TimingTask 是巡检计划。
  • InspectionTask 是巡检执行记录。
  • QrCode 是现场二维码台账。
  • QrCodeScanRecord 是扫码行为记录。
  • 巡检异常会联动生成维修单。
  • 巡检单和扫码记录都会关联附件资源。

6. 对前端的意义

前端对这个模块的使用方式可以概括为:

  1. 先维护巡检计划,再由系统自动生成巡检单。
  2. 巡检单支持人工补录、编辑、导出、删除。
  3. 定时任务支持启用、禁用和重新调度。
  4. 巡检异常后,系统会自动补一条维修单,前端需要能及时刷新相关页面。
  5. 二维码和扫码记录属于独立的辅助管理页面。

7. 接口总览

巡检任务

  • GET /inspectionTask/list
  • POST /inspectionTask/export
  • POST /inspectionTask/addOrEditInspectionTask
  • DELETE /inspectionTask/delInspectionTask

定时任务

  • GET /timingTask/list
  • GET /timingTask/recordList/{timingId}
  • POST /timingTask/export
  • POST /timingTask/addOrEditTimingTask
  • POST /timingTask/changeEnable
  • DELETE /timingTask/delTimingTask

二维码

  • GET /qrCode/list
  • POST /qrCode/addOrEditQrCode
  • DELETE /qrCode/delQrCode

扫码记录

  • GET /qrCodeScanRecord/list
  • POST /qrCodeScanRecord/addOrEditQrCodeRecord
  • DELETE /qrCodeScanRecord/delSalesRecord

8. 结论

inspectiontask 模块本质上是一条“计划 -> 调度 -> 生成巡检单 -> 录入结果 -> 异常联动维修 -> 留痕查询”的业务链路。
如果后续要继续拆前后端联调,优先关注三块:定时任务的时间表达式、巡检结果的异常联动、以及巡检列表的聚合展示逻辑。