26 KiB
26 KiB
设施设备领域技术方案
领域编号: 4.3
微服务: ether-asset
最后更新: 2026-04-26
更新记录:
- 2026-04-26: 反向同步实际代码实现到文档。主要变更:设备类型枚举更新为10种(新增ENERGY_METER/LANDSCAPE/KITCHEN,AC→HVAC,FIRE_FIGHTING→FIRE_PROTECTION,POWER_SUPPLY→ELECTRICAL,删除PARKING);设备状态枚举更新(NORMAL→ACTIVE,FAULT→INACTIVE,MAINTAINING→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(设备台账)
@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;
}
系统类型枚举(新增):
public enum SystemType {
ELEVATOR_SYSTEM("电梯系统"),
HVAC_SYSTEM("暖通系统"),
FIRE_SYSTEM("消防系统"),
PLUMBING_SYSTEM("给排水系统"),
ELECTRICAL_SYSTEM("供配电系统"),
SECURITY_SYSTEM("安防系统"),
LANDSCAPE_SYSTEM("园林系统"),
DRAINAGE_SYSTEM("排污系统"),
OTHER("其他");
}
归属类型枚举(新增):
public enum OwnershipType {
SELF("自持"),
DEVELOPER("开发商"),
OWNER("业主"),
VENDOR("厂商");
}
附件DTO:
@Data
public class AttachmentDTO {
private String name; // 文件名
private String url; // 文件URL
private String type; // 文件类型
private Long size; // 文件大小
private LocalDateTime uploadedAt; // 上传时间
}
设备类型枚举:
// 设备类型枚举(10种)
public enum EquipmentType {
ELEVATOR("电梯"),
HVAC("暖通空调"),
FIRE_PROTECTION("消防设备"),
PLUMBING("给排水"),
ELECTRICAL("供配电"),
ENERGY_METER("能源计量"),
SECURITY("安防设备"),
LANDSCAPE("园林景观"),
KITCHEN("厨房设备"),
OTHER("其他设备");
}
EquipmentElevator(电梯扩展表,新增)
@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(暖通扩展表,新增)
@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(消防扩展表,新增)
@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(能源计量扩展表,新增)
@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)
@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(故障历史,新增)
@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(归属主体,新增)
@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),不再嵌套在设备管理接口下。
@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(维保工单),增加了工单状态流转、费用记录、签名确认等字段。
@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 故障自动报修
@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 维保到期提醒
@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传感器接入 | 对接传感器数据 |
五、数据库表结构
-- 设备台账表
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 服务负责人维护