371 lines
10 KiB
Markdown
371 lines
10 KiB
Markdown
# 设施设备领域技术方案
|
||
|
||
**领域编号**: 4.3
|
||
**微服务**: ether-asset
|
||
**最后更新**: 2026-02-14
|
||
|
||
---
|
||
|
||
## 一、领域概述
|
||
|
||
### 1.1 领域职责
|
||
|
||
设施设备领域负责管理物业资产全生命周期:
|
||
|
||
- 设备台账管理(电梯、空调、消防、给排水、供配电等)
|
||
- 设备维保计划与记录
|
||
- 设备故障管理
|
||
- 设备与工单联动
|
||
|
||
### 1.2 核心概念
|
||
|
||
| 概念 | 说明 | 对应实体 |
|
||
| ------------ | ---------------------------- | ----------------- |
|
||
| **设备台账** | 设备基础信息和运行状态 | Equipment |
|
||
| **维保计划** | 定期保养计划 | MaintenancePlan |
|
||
| **维保记录** | 保养执行记录 | MaintenanceRecord |
|
||
| **设备类型** | 设备分类(电梯/空调/消防等) | EquipmentType |
|
||
|
||
---
|
||
|
||
## 二、领域模型
|
||
|
||
### 2.1 聚合根设计
|
||
|
||
#### Equipment(设备台账)
|
||
|
||
```java
|
||
@Entity
|
||
@Table(name = "asset_equipment")
|
||
@Data
|
||
public class Equipment {
|
||
@Id
|
||
private UUID id;
|
||
private UUID projectId;
|
||
|
||
private String code; // 设备编码
|
||
private String name; // 设备名称
|
||
|
||
// 分类
|
||
private EquipmentType type; // ELEVATOR/AC/FIRE/PLUMBING/POWER
|
||
private EquipmentStatus status; // NORMAL/FAULT/MAINTAINING/SCRAPPED
|
||
|
||
// 品牌型号
|
||
private String brand;
|
||
private String model;
|
||
private String specifications;
|
||
private String serialNumber;
|
||
|
||
// 厂商信息
|
||
private String manufacturer;
|
||
private String supplier;
|
||
private String supplierPhone;
|
||
|
||
// 位置
|
||
private UUID spaceNodeId; // 关联空间节点
|
||
private String locationDesc; // 位置描述
|
||
|
||
// 时间
|
||
private LocalDate purchaseDate;
|
||
private LocalDate installDate;
|
||
private LocalDate warrantyDate;
|
||
private Integer lifespanYears; // 设计寿命(年)
|
||
|
||
// 维保
|
||
private Integer maintenanceCycle; // 保养周期(天)
|
||
private LocalDate lastMaintenanceDate;
|
||
private LocalDate nextMaintenanceDate;
|
||
|
||
// 负责人
|
||
private UUID managerId;
|
||
private String managerName;
|
||
private String contactPhone;
|
||
|
||
// 二维码
|
||
private String qrCode;
|
||
|
||
// 扩展属性(JSONB)
|
||
private String attributes;
|
||
|
||
// 审计字段
|
||
private LocalDateTime createdAt;
|
||
private LocalDateTime updatedAt;
|
||
}
|
||
```
|
||
|
||
**设备类型枚举**:
|
||
|
||
```java
|
||
public enum EquipmentType {
|
||
ELEVATOR("电梯"),
|
||
AIR_CONDITIONER("空调"),
|
||
FIRE_FIGHTING("消防设备"),
|
||
PLUMBING("给排水"),
|
||
POWER_SUPPLY("供配电"),
|
||
SECURITY("安防设备"),
|
||
PARKING("停车设备"),
|
||
OTHER("其他");
|
||
}
|
||
```
|
||
|
||
#### MaintenancePlan(维保计划)
|
||
|
||
```java
|
||
@Entity
|
||
@Table(name = "asset_maintenance_plan")
|
||
@Data
|
||
public class MaintenancePlan {
|
||
@Id
|
||
private UUID id;
|
||
private UUID projectId;
|
||
private UUID equipmentId; // 关联设备
|
||
|
||
private String name;
|
||
private MaintenanceType type; // DAILY/WEEKLY/MONTHLY/QUARTERLY/YEARLY
|
||
|
||
// 周期
|
||
private Integer cycleDays; // 周期天数
|
||
private String cronExpression; // Cron表达式
|
||
|
||
// 内容
|
||
private String content; // 保养内容描述
|
||
private String checkItems; // 检查项清单(JSON)
|
||
|
||
// 负责人
|
||
private UUID maintainerId;
|
||
private String maintainerName;
|
||
|
||
// 提醒
|
||
private Integer remindDays; // 提前提醒天数
|
||
|
||
// 状态
|
||
private Boolean enabled;
|
||
|
||
// 审计字段
|
||
private LocalDateTime createdAt;
|
||
private LocalDateTime updatedAt;
|
||
}
|
||
```
|
||
|
||
#### MaintenanceRecord(维保记录)
|
||
|
||
```java
|
||
@Entity
|
||
@Table(name = "asset_maintenance_record")
|
||
@Data
|
||
public class MaintenanceRecord {
|
||
@Id
|
||
private UUID id;
|
||
private UUID equipmentId;
|
||
private UUID planId; // 关联计划
|
||
|
||
// 维保信息
|
||
private LocalDate maintenanceDate;
|
||
private MaintenanceType type;
|
||
private String content;
|
||
|
||
// 执行人
|
||
private UUID maintainerId;
|
||
private String maintainerName;
|
||
|
||
// 结果
|
||
private MaintenanceResult result; // NORMAL/ABNORMAL
|
||
private String remark;
|
||
private String images;
|
||
|
||
// 检查项结果
|
||
private String checkResults; // [{"item":"检查A","result":"PASS"}]
|
||
|
||
// 关联工单
|
||
private UUID workOrderId; // 异常时关联的维修工单
|
||
|
||
// 下次维保
|
||
private LocalDate nextMaintenanceDate;
|
||
|
||
// 审计字段
|
||
private LocalDateTime createdAt;
|
||
private LocalDateTime updatedAt;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 三、设备与工单联动
|
||
|
||
### 3.1 故障自动报修
|
||
|
||
```java
|
||
@Component
|
||
public class EquipmentFaultHandler {
|
||
|
||
@Autowired
|
||
private WorkOrderService workOrderService;
|
||
|
||
@EventListener
|
||
public void onEquipmentFault(EquipmentFaultEvent event) {
|
||
Equipment equipment = event.getEquipment();
|
||
|
||
// 创建设备维修工单
|
||
WorkOrder workOrder = new WorkOrder();
|
||
workOrder.setOrderType(WorkOrderType.REPAIR);
|
||
workOrder.setTitle("设备故障: " + equipment.getName());
|
||
workOrder.setDescription(event.getFaultDescription());
|
||
workOrder.setEquipmentId(equipment.getId());
|
||
workOrder.setSpaceNodeId(equipment.getSpaceNodeId());
|
||
workOrder.setPriority(WorkOrderPriority.HIGH);
|
||
workOrder.setSource(WorkOrderSource.IOT);
|
||
|
||
workOrderService.create(workOrder);
|
||
|
||
// 更新设备状态
|
||
equipment.setStatus(EquipmentStatus.FAULT);
|
||
equipmentRepository.save(equipment);
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3.2 维保到期提醒
|
||
|
||
```java
|
||
@Component
|
||
public class MaintenanceReminderJob {
|
||
|
||
@Scheduled(cron = "0 0 9 * * ?") // 每天9点执行
|
||
public void remindUpcomingMaintenance() {
|
||
// 查询7天内到期的维保计划
|
||
LocalDate targetDate = LocalDate.now().plusDays(7);
|
||
|
||
List<Equipment> equipments = equipmentRepository
|
||
.findByNextMaintenanceDateBeforeAndStatus(targetDate, EquipmentStatus.NORMAL);
|
||
|
||
for (Equipment equipment : equipments) {
|
||
notificationService.sendMaintenanceReminder(equipment);
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 四、实现状态与差异
|
||
|
||
### 4.1 实现状态
|
||
|
||
| 功能模块 | 实现状态 | 备注 |
|
||
| ----------------- | ----------- | ---------------------- |
|
||
| Equipment | 🟢 已实现 | 基础CRUD、二维码生成 |
|
||
| MaintenancePlan | 🟢 已实现 | 已迁移至 ether-asset |
|
||
| MaintenanceRecord | 🟢 已实现 | 已迁移至 ether-asset |
|
||
| 设备二维码 | 🟢 已实现 | 支持扫码查看设备信息 |
|
||
| 故障自动工单 | 🟡 部分实现 | 设备状态变更可关联工单 |
|
||
| IoT集成 | 🔴 未实现 | 待开发 |
|
||
|
||
### 4.2 与设计方案的差异
|
||
|
||
| 设计项 | 设计方案 | 现有实现 | 差异分析 |
|
||
| ------------ | ------------ | ----------- | --------------------------------------- |
|
||
| **维保归属** | ether-asset | ether-asset | ✅ 已修正:维保实体已统一在 ether-asset |
|
||
| **设备管理** | ether-asset | ether-asset | ✅ 已修正:设备实体已统一在 ether-asset |
|
||
| **设备联动** | 故障自动工单 | 部分实现 | 🟡 功能完善中 |
|
||
|
||
### 4.3 改进计划
|
||
|
||
| 优先级 | 改进项 | 说明 |
|
||
| ------ | ------------------ | ---------------------------------------------------- |
|
||
| ~~P1~~ | ~~迁移维保实体~~ | ~~将MaintenancePlan/Record迁移到ether-asset~~ 已完成 |
|
||
| P2 | 完善故障自动工单 | 设备状态变更时自动创建维修工单 |
|
||
| P2 | 完善设备二维码功能 | 支持扫码报修 |
|
||
| P3 | IoT传感器接入 | 对接传感器数据 |
|
||
|
||
---
|
||
|
||
## 五、数据库表结构
|
||
|
||
```sql
|
||
-- 设备台账表
|
||
CREATE TABLE asset_equipment (
|
||
id UUID PRIMARY KEY,
|
||
project_id UUID NOT NULL,
|
||
code VARCHAR(50) NOT NULL,
|
||
name VARCHAR(100) NOT NULL,
|
||
type VARCHAR(20) NOT NULL,
|
||
status VARCHAR(20) NOT NULL DEFAULT 'NORMAL',
|
||
brand VARCHAR(100),
|
||
model VARCHAR(100),
|
||
specifications VARCHAR(500),
|
||
serial_number VARCHAR(100),
|
||
manufacturer VARCHAR(100),
|
||
supplier VARCHAR(100),
|
||
supplier_phone VARCHAR(20),
|
||
space_node_id UUID,
|
||
location_desc VARCHAR(255),
|
||
purchase_date DATE,
|
||
install_date DATE,
|
||
warranty_date DATE,
|
||
lifespan_years INTEGER,
|
||
maintenance_cycle INTEGER,
|
||
last_maintenance_date DATE,
|
||
next_maintenance_date DATE,
|
||
manager_id UUID,
|
||
manager_name VARCHAR(100),
|
||
contact_phone VARCHAR(20),
|
||
qr_code VARCHAR(255),
|
||
attributes JSONB,
|
||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
UNIQUE(project_id, code)
|
||
);
|
||
|
||
-- 维保计划表
|
||
CREATE TABLE asset_maintenance_plan (
|
||
id UUID PRIMARY KEY,
|
||
project_id UUID NOT NULL,
|
||
equipment_id UUID NOT NULL,
|
||
name VARCHAR(100) NOT NULL,
|
||
type VARCHAR(20) NOT NULL,
|
||
cycle_days INTEGER,
|
||
cron_expression VARCHAR(50),
|
||
content TEXT,
|
||
check_items JSONB,
|
||
maintainer_id UUID,
|
||
maintainer_name VARCHAR(100),
|
||
remind_days INTEGER DEFAULT 3,
|
||
enabled BOOLEAN DEFAULT TRUE,
|
||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
-- 维保记录表
|
||
CREATE TABLE asset_maintenance_record (
|
||
id UUID PRIMARY KEY,
|
||
equipment_id UUID NOT NULL,
|
||
plan_id UUID,
|
||
maintenance_date DATE NOT NULL,
|
||
type VARCHAR(20) NOT NULL,
|
||
content TEXT,
|
||
maintainer_id UUID,
|
||
maintainer_name VARCHAR(100),
|
||
result VARCHAR(20),
|
||
remark VARCHAR(500),
|
||
images TEXT,
|
||
check_results JSONB,
|
||
work_order_id UUID,
|
||
next_maintenance_date DATE,
|
||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
-- 创建索引
|
||
CREATE INDEX idx_equipment_project ON asset_equipment(project_id);
|
||
CREATE INDEX idx_equipment_type ON asset_equipment(type);
|
||
CREATE INDEX idx_equipment_status ON asset_equipment(status);
|
||
CREATE INDEX idx_equipment_space ON asset_equipment(space_node_id);
|
||
CREATE INDEX idx_equipment_next_maintenance ON asset_equipment(next_maintenance_date);
|
||
CREATE INDEX idx_maintenance_plan_equipment ON asset_maintenance_plan(equipment_id);
|
||
CREATE INDEX idx_maintenance_record_equipment ON asset_maintenance_record(equipment_id);
|
||
```
|
||
|
||
---
|
||
|
||
**文档维护**: 本领域技术方案由 ether-asset 服务负责人维护
|