ether-docs/_archive/domains-old/03-ASSET.md

816 lines
26 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 设施设备领域技术方案
**领域编号**: 4.3
**微服务**: ether-asset
**最后更新**: 2026-04-26
> **更新记录**:
> - 2026-04-26: 反向同步实际代码实现到文档。主要变更设备类型枚举更新为10种新增ENERGY_METER/LANDSCAPE/KITCHENAC→HVACFIRE_FIGHTING→FIRE_PROTECTIONPOWER_SUPPLY→ELECTRICAL删除PARKING设备状态枚举更新NORMAL→ACTIVEFAULT→INACTIVEMAINTAINING→MAINTENANCE新增4张专业扩展表Elevator/Hvac/Fire/Energy新增系统类型SystemType 9种新增归属管理OwnershipType+OwnershipEntity新增健康评分算法MTBF/MTTR标注为Beta新增故障历史EquipmentFailureHistory新增设备照片/文档JSONB内嵌新增Excel导入导出新增特种设备管理新增能耗标准字段字段名变更code→equipmentCode, name→equipmentName, locationDesc→installationLocation维保计划迁移至独立API维保记录升级为维保工单标注TODO: 维保完成率计算暂返回1.0。
---
## 一、领域概述
### 1.1 领域职责
设施设备领域负责管理物业资产全生命周期:
- 设备台账管理(电梯、空调、消防、给排水、供配电等)
- 设备维保计划与记录
- 设备故障管理
- 设备与工单联动
### 1.2 核心概念
| 概念 | 说明 | 对应实体 |
|------|------|----------|
| **设备台账** | 设备基础信息和运行状态 | Equipment |
| **电梯扩展** | 电梯专业参数(载重/速度/注册号等) | EquipmentElevator |
| **暖通扩展** | 暖通空调专业参数(制冷量/制热量/能效比等) | EquipmentHvac |
| **消防扩展** | 消防设备专业参数(探测范围/联动/分区等) | EquipmentFire |
| **能源计量扩展** | 能源表计专业参数(表常数/精度/通讯等) | EquipmentEnergy |
| **健康评分** | 设备健康度评估结果 | EquipmentHealthScore |
| **故障历史** | 设备故障与维修记录 | EquipmentFailureHistory |
| **归属主体** | 设备归属方信息 | OwnershipEntity |
| **维保计划** | 定期保养计划已迁移至独立API | MaintenancePlan |
| **维保工单** | 维保执行工单(原维保记录升级) | MaintenanceTask |
---
## 二、领域模型
### 2.1 聚合根设计
#### Equipment设备台账
```java
@Entity
@Table(name = "asset_equipment")
@Data
public class Equipment {
@Id
private UUID id;
private UUID projectId;
private String equipmentCode; // 设备编码原code
private String equipmentName; // 设备名称原name
// 分类
private EquipmentType type; // 10种设备类型
private EquipmentStatus status; // ACTIVE/INACTIVE/MAINTENANCE/SCRAPPED
// 系统类型(新增)
private SystemType systemType; // 所属系统类型9种
// 品牌型号
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 installationLocation; // 安装位置原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 OwnershipType ownershipType; // SELF(自持)/DEVELOPER(开发商)/OWNER(业主)/VENDOR(厂商)
private UUID ownershipEntityId; // 归属主体ID
// 特种设备管理(新增)
private Boolean isSpecialEquipment; // 是否特种设备
private String specialEquipmentCode; // 特种设备使用登记证编号
private String specialEquipmentType; // 特种设备类型
private LocalDate specialInspectionDate; // 特种设备检验日期
private LocalDate nextSpecialInspectionDate; // 下次检验日期
// 能耗标准(新增)
private String energyStandard; // 能效标准
private BigDecimal ratedPower; // 额定功率(kW)
private BigDecimal energyEfficiencyRating; // 能效等级
// 二维码
private String qrCode;
// 设备照片/文档新增JSONB内嵌
@JdbcTypeCode(SqlTypes.JSON)
@Column(columnDefinition = "jsonb")
private List<AttachmentDTO> photos; // 设备照片列表
@JdbcTypeCode(SqlTypes.JSON)
@Column(columnDefinition = "jsonb")
private List<AttachmentDTO> documents; // 设备文档列表
// 扩展属性(JSONB)
private String attributes;
// 审计字段
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
```
**系统类型枚举(新增)**:
```java
public enum SystemType {
ELEVATOR_SYSTEM("电梯系统"),
HVAC_SYSTEM("暖通系统"),
FIRE_SYSTEM("消防系统"),
PLUMBING_SYSTEM("给排水系统"),
ELECTRICAL_SYSTEM("供配电系统"),
SECURITY_SYSTEM("安防系统"),
LANDSCAPE_SYSTEM("园林系统"),
DRAINAGE_SYSTEM("排污系统"),
OTHER("其他");
}
```
**归属类型枚举(新增)**:
```java
public enum OwnershipType {
SELF("自持"),
DEVELOPER("开发商"),
OWNER("业主"),
VENDOR("厂商");
}
```
**附件DTO**:
```java
@Data
public class AttachmentDTO {
private String name; // 文件名
private String url; // 文件URL
private String type; // 文件类型
private Long size; // 文件大小
private LocalDateTime uploadedAt; // 上传时间
}
```
**设备类型枚举**:
```java
// 设备类型枚举10种
public enum EquipmentType {
ELEVATOR("电梯"),
HVAC("暖通空调"),
FIRE_PROTECTION("消防设备"),
PLUMBING("给排水"),
ELECTRICAL("供配电"),
ENERGY_METER("能源计量"),
SECURITY("安防设备"),
LANDSCAPE("园林景观"),
KITCHEN("厨房设备"),
OTHER("其他设备");
}
```
#### EquipmentElevator电梯扩展表新增
```java
@Entity
@Table(name = "asset_equipment_elevator")
@Data
public class EquipmentElevator {
@Id
private UUID id;
private UUID equipmentId; // 关联设备ID
private UUID projectId;
private Integer loadCapacity; // 载重(kg)
private BigDecimal speed; // 速度(m/s)
private Integer floors; // 楼层数
private Integer stops; // 停站数
private String doorType; // 门类型
private String driveType; // 驱动方式
private String registrationCode; // 使用登记证编号
private LocalDate inspectionExpiryDate; // 检验有效期
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
```
#### EquipmentHvac暖通扩展表新增
```java
@Entity
@Table(name = "asset_equipment_hvac")
@Data
public class EquipmentHvac {
@Id
private UUID id;
private UUID equipmentId;
private UUID projectId;
private BigDecimal coolingCapacity; // 制冷量(kW)
private BigDecimal heatingCapacity; // 制热量(kW)
private BigDecimal cop; // 能效比
private String refrigerant; // 制冷剂
private BigDecimal airflow; // 风量(m³/h)
private String pipeType; // 管道类型
private BigDecimal pipeLength; // 管道长度(m)
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
```
#### EquipmentFire消防扩展表新增
```java
@Entity
@Table(name = "asset_equipment_fire")
@Data
public class EquipmentFire {
@Id
private UUID id;
private UUID equipmentId;
private UUID projectId;
private String detectionRange; // 探测范围
private Boolean hasLinkage; // 是否联动
private String fireZone; // 防火分区
private String extinguishingAgent; // 灭火剂类型
private BigDecimal agentCapacity; // 灭火剂容量
private LocalDate lastTestDate; // 上次测试日期
private LocalDate nextTestDate; // 下次测试日期
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
```
#### EquipmentEnergy能源计量扩展表新增
```java
@Entity
@Table(name = "asset_equipment_energy")
@Data
public class EquipmentEnergy {
@Id
private UUID id;
private UUID equipmentId;
private UUID projectId;
private String meterConstant; // 表常数
private String accuracyClass; // 精度等级
private String communicationProtocol; // 通讯协议
private String meterCategory; // 表计类别
private BigDecimal ctRatio; // CT变比
private BigDecimal ptRatio; // PT变比
private LocalDate calibrationDate; // 校验日期
private LocalDate nextCalibrationDate; // 下次校验日期
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
```
#### EquipmentHealthScore健康评分新增Beta
```java
@Entity
@Table(name = "asset_equipment_health_score")
@Data
public class EquipmentHealthScore {
@Id
private UUID id;
private UUID equipmentId;
private UUID projectId;
private BigDecimal score; // 健康评分(0-100)
private String level; // 健康等级: EXCELLENT/GOOD/FAIR/POOR
private BigDecimal mtbf; // 平均故障间隔时间(MTBF, 小时)
private BigDecimal mttr; // 平均修复时间(MTTR, 小时)
private Integer totalFailures; // 总故障次数
private Integer totalMaintenance; // 总维保次数
private BigDecimal availability; // 可用率(%)
private LocalDateTime calculatedAt; // 计算时间
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
```
> **Beta标注**: 健康评分算法基于MTBF/MTTR计算当前为Beta版本评分模型和权重参数需根据实际运行数据持续优化。
#### EquipmentFailureHistory故障历史新增
```java
@Entity
@Table(name = "asset_equipment_failure_history")
@Data
public class EquipmentFailureHistory {
@Id
private UUID id;
private UUID equipmentId;
private UUID projectId;
private LocalDateTime failureTime; // 故障时间
private String failureType; // 故障类型
private String failureDescription; // 故障描述
private String faultCause; // 故障原因
private String solution; // 解决方案
private UUID repairWorkOrderId; // 关联维修工单
private LocalDateTime resolvedTime; // 修复时间
private Long downtimeMinutes; // 停机时长(分钟)
private String reportedBy; // 报告人
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
```
#### OwnershipEntity归属主体新增
```java
@Entity
@Table(name = "asset_ownership_entity")
@Data
public class OwnershipEntity {
@Id
private UUID id;
private UUID projectId;
private OwnershipType type; // SELF/DEVELOPER/OWNER/VENDOR
private String name; // 归属方名称
private String contactPerson; // 联系人
private String contactPhone; // 联系电话
private String address; // 地址
private String description; // 描述
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
```
#### MaintenancePlan维保计划
> **注意**: 维保计划已迁移至独立API`/api/asset/maintenance-plans`),不再嵌套在设备管理接口下。
```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;
}
```
#### MaintenanceTask维保工单原MaintenanceRecord升级
> **注意**: 原MaintenanceRecord已升级为MaintenanceTask维保工单增加了工单状态流转、费用记录、签名确认等字段。
```java
@Entity
@Table(name = "asset_maintenance_task")
@Data
public class MaintenanceTask {
@Id
private UUID id;
private UUID equipmentId;
private UUID planId; // 关联计划
private UUID projectId;
// 工单信息
private String taskCode; // 工单编号
private MaintenanceTaskStatus status; // PENDING/IN_PROGRESS/COMPLETED/CANCELLED
// 维保信息
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 BigDecimal laborCost; // 人工费
private BigDecimal partsCost; // 材料费
private BigDecimal totalCost; // 总费用
// 签名确认(新增)
private String signature; // 签名图片URL
// 关联工单
private UUID workOrderId; // 异常时关联的维修工单
// 下次维保
private LocalDate nextMaintenanceDate;
// 审计字段
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
public enum MaintenanceTaskStatus {
PENDING("待执行"),
IN_PROGRESS("执行中"),
COMPLETED("已完成"),
CANCELLED("已取消");
}
```
---
## 三、设备与工单联动
### 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.getEquipmentName());
workOrder.setDescription(event.getFaultDescription());
workOrder.setEquipmentId(equipment.getId());
workOrder.setSpaceNodeId(equipment.getSpaceNodeId());
workOrder.setPriority(WorkOrderPriority.HIGH);
workOrder.setSource(WorkOrderSource.FAULT);
workOrderService.create(workOrder);
// 更新设备状态
equipment.setStatus(EquipmentStatus.INACTIVE);
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.ACTIVE);
for (Equipment equipment : equipments) {
notificationService.sendMaintenanceReminder(equipment);
}
}
}
```
---
## 四、实现状态与差异
### 4.1 实现状态
| 功能模块 | 实现状态 | 备注 |
|---------|---------|------|
| Equipment | 🟢 已实现 | 基础CRUD字段名已更新(equipmentCode/equipmentName/installationLocation) |
| EquipmentElevator | 🟢 已实现 | 电梯专业扩展表 |
| EquipmentHvac | 🟢 已实现 | 暖通专业扩展表 |
| EquipmentFire | 🟢 已实现 | 消防专业扩展表 |
| EquipmentEnergy | 🟢 已实现 | 能源计量扩展表 |
| EquipmentHealthScore | 🟢 已实现(Beta) | 健康评分MTBF/MTTR算法Beta版本 |
| EquipmentFailureHistory | 🟢 已实现 | 故障历史记录 |
| OwnershipEntity | 🟢 已实现 | 归属主体管理 |
| MaintenancePlan | 🟢 已实现 | 已迁移至独立API |
| MaintenanceTask | 🟢 已实现 | 原MaintenanceRecord升级为维保工单 |
| 设备二维码 | 🟢 已实现 | 支持扫码查看设备信息 |
| Excel导入导出 | 🟢 已实现 | 设备台账Excel导入导出 |
| 特种设备管理 | 🟢 已实现 | 特种设备登记证/检验日期 |
| 能耗标准字段 | 🟢 已实现 | 能效标准/额定功率/能效等级 |
| 设备照片/文档 | 🟢 已实现 | JSONB内嵌存储 |
| 故障自动工单 | 🟡 部分实现 | 设备状态变更可关联工单 |
| 维保完成率计算 | 🟡 部分实现 | TODO: 当前暂返回1.0,需实现真实计算 |
| IoT集成 | 🔴 未实现 | 待开发 |
### 4.2 与设计方案的差异
| 设计项 | 设计方案 | 现有实现 | 差异分析 |
|--------|----------|----------|----------|
| **维保归属** | ether-asset | ether-asset | 已修正:维保实体已统一在 ether-asset |
| **设备管理** | ether-asset | ether-asset | 已修正:设备实体已统一在 ether-asset |
| **设备联动** | 故障自动工单 | 部分实现 | 功能完善中 |
| **设备类型** | 8种枚举 | 10种枚举 | 已扩展新增ENERGY_METER/LANDSCAPE/KITCHEN |
| **设备状态** | NORMAL/FAULT | ACTIVE/INACTIVE | 已修正:语义更清晰 |
| **专业扩展** | 无 | 4张扩展表 | 已新增Elevator/Hvac/Fire/Energy |
| **健康评分** | 无 | Beta实现 | 已新增基于MTBF/MTTR |
| **归属管理** | 无 | OwnershipEntity | 已新增4种归属类型 |
| **维保记录** | MaintenanceRecord | MaintenanceTask | 已升级:增加工单状态/费用/签名 |
| **字段命名** | code/name/locationDesc | equipmentCode/equipmentName/installationLocation | 已修正:命名更规范 |
### 4.3 改进计划
| 优先级 | 改进项 | 说明 |
|--------|--------|------|
| P0 | 维保完成率计算 | 当前暂返回1.0,需实现真实计算逻辑 |
| P1 | 健康评分优化 | Beta版评分模型需根据实际运行数据持续优化 |
| P1 | 完善故障自动工单 | 设备状态变更时自动创建维修工单 |
| P2 | 完善设备二维码功能 | 支持扫码报修 |
| P3 | IoT传感器接入 | 对接传感器数据 |
---
## 五、数据库表结构
```sql
-- 设备台账表
CREATE TABLE asset_equipment (
id UUID PRIMARY KEY,
project_id UUID NOT NULL,
equipment_code VARCHAR(50) NOT NULL,
equipment_name VARCHAR(100) NOT NULL,
type VARCHAR(20) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
system_type VARCHAR(30),
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,
installation_location 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),
ownership_type VARCHAR(20),
ownership_entity_id UUID,
is_special_equipment BOOLEAN DEFAULT FALSE,
special_equipment_code VARCHAR(100),
special_equipment_type VARCHAR(50),
special_inspection_date DATE,
next_special_inspection_date DATE,
energy_standard VARCHAR(100),
rated_power DECIMAL(10,2),
energy_efficiency_rating DECIMAL(3,1),
qr_code VARCHAR(255),
photos JSONB,
documents JSONB,
attributes JSONB,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
UNIQUE(project_id, equipment_code)
);
-- 电梯扩展表
CREATE TABLE asset_equipment_elevator (
id UUID PRIMARY KEY,
equipment_id UUID NOT NULL REFERENCES asset_equipment(id),
project_id UUID NOT NULL,
load_capacity INTEGER,
speed DECIMAL(5,2),
floors INTEGER,
stops INTEGER,
door_type VARCHAR(50),
drive_type VARCHAR(50),
registration_code VARCHAR(100),
inspection_expiry_date DATE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 暖通扩展表
CREATE TABLE asset_equipment_hvac (
id UUID PRIMARY KEY,
equipment_id UUID NOT NULL REFERENCES asset_equipment(id),
project_id UUID NOT NULL,
cooling_capacity DECIMAL(10,2),
heating_capacity DECIMAL(10,2),
cop DECIMAL(5,2),
refrigerant VARCHAR(50),
airflow DECIMAL(10,2),
pipe_type VARCHAR(50),
pipe_length DECIMAL(10,2),
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 消防扩展表
CREATE TABLE asset_equipment_fire (
id UUID PRIMARY KEY,
equipment_id UUID NOT NULL REFERENCES asset_equipment(id),
project_id UUID NOT NULL,
detection_range VARCHAR(100),
has_linkage BOOLEAN,
fire_zone VARCHAR(100),
extinguishing_agent VARCHAR(50),
agent_capacity DECIMAL(10,2),
last_test_date DATE,
next_test_date DATE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 能源计量扩展表
CREATE TABLE asset_equipment_energy (
id UUID PRIMARY KEY,
equipment_id UUID NOT NULL REFERENCES asset_equipment(id),
project_id UUID NOT NULL,
meter_constant VARCHAR(50),
accuracy_class VARCHAR(20),
communication_protocol VARCHAR(50),
meter_category VARCHAR(50),
ct_ratio DECIMAL(10,2),
pt_ratio DECIMAL(10,2),
calibration_date DATE,
next_calibration_date DATE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 健康评分表
CREATE TABLE asset_equipment_health_score (
id UUID PRIMARY KEY,
equipment_id UUID NOT NULL REFERENCES asset_equipment(id),
project_id UUID NOT NULL,
score DECIMAL(5,2),
level VARCHAR(20),
mtbf DECIMAL(12,2),
mttr DECIMAL(12,2),
total_failures INTEGER DEFAULT 0,
total_maintenance INTEGER DEFAULT 0,
availability DECIMAL(5,2),
calculated_at TIMESTAMP,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 故障历史表
CREATE TABLE asset_equipment_failure_history (
id UUID PRIMARY KEY,
equipment_id UUID NOT NULL REFERENCES asset_equipment(id),
project_id UUID NOT NULL,
failure_time TIMESTAMP NOT NULL,
failure_type VARCHAR(50),
failure_description TEXT,
fault_cause TEXT,
solution TEXT,
repair_work_order_id UUID,
resolved_time TIMESTAMP,
downtime_minutes BIGINT,
reported_by VARCHAR(100),
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 归属主体表
CREATE TABLE asset_ownership_entity (
id UUID PRIMARY KEY,
project_id UUID NOT NULL,
type VARCHAR(20) NOT NULL,
name VARCHAR(100) NOT NULL,
contact_person VARCHAR(100),
contact_phone VARCHAR(20),
address VARCHAR(255),
description TEXT,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 维保计划表
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_task (
id UUID PRIMARY KEY,
equipment_id UUID NOT NULL,
plan_id UUID,
project_id UUID NOT NULL,
task_code VARCHAR(50),
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
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,
labor_cost DECIMAL(10,2),
parts_cost DECIMAL(10,2),
total_cost DECIMAL(10,2),
signature VARCHAR(255),
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_equipment_system_type ON asset_equipment(system_type);
CREATE INDEX idx_equipment_ownership ON asset_equipment(ownership_entity_id);
CREATE INDEX idx_equipment_special ON asset_equipment(is_special_equipment) WHERE is_special_equipment = TRUE;
CREATE INDEX idx_maintenance_plan_equipment ON asset_maintenance_plan(equipment_id);
CREATE INDEX idx_maintenance_task_equipment ON asset_maintenance_task(equipment_id);
CREATE INDEX idx_maintenance_task_status ON asset_maintenance_task(status);
CREATE INDEX idx_failure_history_equipment ON asset_equipment_failure_history(equipment_id);
CREATE INDEX idx_health_score_equipment ON asset_equipment_health_score(equipment_id);
```
---
**文档维护**: 本领域技术方案由 ether-asset 服务负责人维护