# Ether 智慧物业管理平台 - 领域技术实现方案 **文档版本**: v1.0 **最后更新**: 2026-02-10 **编制依据**: 需求规格说明书、领域模型详细设计、现有代码实现 --- ## 一、领域划分总览 根据需求规格说明书,系统划分为 **6大领域**: | 领域 | 微服务 | 核心职责 | 实现状态 | |------|--------|----------|----------| | **4.1 空间与主数据领域** | ether-mdm | 物理数字孪生底座 | 🟡 部分实现 | | **4.2 运营调度领域** | ether-ops | 工单、巡检、排班、访客 | 🟢 基本实现 | | **4.3 设施设备领域** | ether-asset | 资产台账、维保计划 | 🟡 部分实现 | | **4.4 财务计费领域** | ether-finance | 账单、支付、退款 | 🟡 部分实现 | | **4.5 权限与账户领域** | ether-auth | RBAC、访客凭证、项目隔离 | 🟢 基本实现 | | **4.6 集成中心领域** | ether-hub | 外部系统适配、IoT网关 | 🔴 未实现 | **图例说明**: 🟢 基本实现 | 🟡 部分实现 | 🔴 未实现 --- ## 二、各领域技术实现方案 ### 2.1 空间与主数据领域 (ether-mdm) #### 2.1.1 领域职责 - 管理物理空间的数字孪生(园区→楼栋→楼层→房间) - 房产明细与权属关系 - 业主信息管理 - 巡检管理(计划、任务、记录) - 访客管理(预约、记录、黑名单) #### 2.1.2 核心聚合根设计 ```java // 聚合根: SpaceNode - 空间节点 @Entity @Table(name = "mdm_space_node") public class SpaceNode { @Id private UUID id; private UUID projectId; private String code; // 节点编码 private String name; // 节点名称 private SpaceNodeType nodeType; // 类型: PROJECT/BUILDING/FLOOR/ROOM/AREA private SpaceNodeStatus status; // 树形结构 private UUID parentId; private String treePath; // Ltree路径: 1.2.3.4 private Integer level; // 空间属性 private BigDecimal areaSqm; private BigDecimal longitude; private BigDecimal latitude; private String address; // 扩展属性(JSONB) private String attributes; } // 聚合根: RoomDetail - 房间详情 @Entity @Table(name = "mdm_room_detail") public class RoomDetail { @Id private UUID id; private UUID spaceNodeId; // 关联SpaceNode // 房产属性 private String roomType; // 住宅/商铺/办公/仓库 private BigDecimal buildArea; // 建筑面积 private BigDecimal usableArea; // 使用面积 private String orientation; // 朝向 private Integer floor; // 所在楼层 // 状态 private RoomStatus status; // 空置/已售/已租/装修中 } // 聚合根: Ownership - 产权信息 @Entity @Table(name = "mdm_ownership") public class Ownership { @Id private UUID id; private UUID spaceNodeId; // 关联房产 private UUID ownerId; // 关联业主 // 产权属性 private OwnershipType type; // 产权/使用权/租赁权 private BigDecimal sharePercent; // 产权份额 private LocalDate startDate; // 起始日期 private LocalDate endDate; // 结束日期(租赁) // 证件信息 private String certType; // 证件类型 private String certNo; // 证件号码 private String certFileUrl; // 证件扫描件 } // 聚合根: Owner - 业主 @Entity @Table(name = "mdm_owner") public class Owner { @Id private UUID id; private UUID projectId; // 基本信息 private String name; private String phone; private String email; private OwnerType type; // 个人/企业 // 证件信息 private String idCardType; private String idCardNo; // 关联账户 private UUID userId; // 关联系统用户 } ``` #### 2.1.3 现有实现与设计方案差异 | 设计项 | 设计方案 | 现有实现 | 差异分析 | |--------|----------|----------|----------| | **SpaceNode** | 使用PostGIS的geometry类型 | 使用longitude/latitude字段 | ⚠️ 移除了PostGIS依赖,简化实现 | | **RoomDetail** | 独立实体,关联SpaceNode | 已实现 | ✅ 符合设计 | | **Ownership** | 独立聚合根 | 已实现 | ✅ 符合设计 | | **Owner** | 独立聚合根 | 已实现 | ✅ 符合设计 | | **树形结构** | 使用PostgreSQL ltree扩展 | 使用treePath字符串 | ⚠️ 未使用ltree扩展 | #### 2.1.4 巡检管理实现 ```java // 聚合根: InspectionPlan - 巡检计划 @Entity @Table(name = "mdm_inspection_plan") public class InspectionPlan { @Id private UUID id; private UUID projectId; private String name; private String description; // 巡检类型 private InspectionType type; // 日常/定期/专项 // 周期配置 private String cronExpression; // Cron表达式 private LocalTime executeTime; // 执行时间 // 关联巡检点 @OneToMany(mappedBy = "plan") private List points; } // 实体: InspectionPoint - 巡检点 @Entity @Table(name = "mdm_inspection_point") public class InspectionPoint { @Id private UUID id; private UUID planId; private UUID spaceNodeId; // 关联空间节点 private String name; private String description; private Integer sortOrder; // 检查项(JSONB) private String checkItems; // [{"item":"消防设施","standard":"正常"}] } // 聚合根: InspectionTask - 巡检任务 @Entity @Table(name = "mdm_inspection_task") public class InspectionTask { @Id private UUID id; private UUID projectId; private UUID planId; // 关联计划 private String taskNo; private LocalDate planDate; // 计划日期 // 执行人 private UUID inspectorId; private String inspectorName; // 状态 private TaskStatus status; // 待执行/执行中/已完成/逾期 // 时间记录 private LocalDateTime startTime; private LocalDateTime endTime; // 关联记录 @OneToMany(mappedBy = "task") private List records; } ``` **实现状态**: ✅ 已实现 InspectionPlan、InspectionPoint、InspectionTask、InspectionRecord #### 2.1.5 访客管理实现 ```java // 聚合根: VisitorAppointment - 访客预约 @Entity @Table(name = "mdm_visitor_appointment") public class VisitorAppointment { @Id private UUID id; private UUID projectId; // 访客信息 private String visitorName; private String visitorPhone; private String visitorIdCard; private VisitorType visitorType; // 访客/快递/外卖/维修 // 被访人信息 private UUID hostId; private String hostName; private String hostPhone; private UUID spaceNodeId; // 访问地点 // 预约信息 private LocalDate visitDate; private LocalTime visitTime; private String purpose; // 凭证 private String qrCode; // 动态二维码 private LocalDateTime qrExpireTime; // 状态 private AppointmentStatus status; // 待确认/已确认/已取消/已完成 } // 实体: VisitorAccessRecord - 访客通行记录 @Entity @Table(name = "mdm_visitor_access_record") public class VisitorAccessRecord { @Id private UUID id; private UUID appointmentId; // 通行信息 private LocalDateTime entryTime; private LocalDateTime exitTime; private String entryGate; // 入口 private String exitGate; // 出口 // 验证方式 private VerifyType verifyType; // 二维码/身份证/人脸识别 private String verifyCode; } // 实体: VisitorBlacklist - 访客黑名单 @Entity @Table(name = "mdm_visitor_blacklist") public class VisitorBlacklist { @Id private UUID id; private UUID projectId; private String visitorName; private String visitorPhone; private String visitorIdCard; private String reason; // 拉黑原因 private LocalDateTime blockTime; private LocalDateTime expireTime; // 过期时间(null为永久) } ``` **实现状态**: ✅ 已实现 VisitorAppointment、VisitorAccessRecord、VisitorBlacklist #### 2.1.6 改进计划 | 优先级 | 改进项 | 说明 | |--------|--------|------| | P1 | 完善SpaceNode树形结构 | 考虑引入ltree扩展或实现路径枚举模式 | | P2 | 添加空间搜索功能 | 基于经纬度的附近空间查询 | | P3 | 优化房产绑定流程 | 实现业主-房产-账户的自动关联 | --- ### 2.2 运营调度领域 (ether-ops) #### 2.2.1 领域职责 - 综合工单管理(创建、分配、处理、关闭) - 工单流转记录 - 消息通知系统(模板、规则、渠道) - 工单统计与分析 #### 2.2.2 核心聚合根设计 ```java // 聚合根: WorkOrder - 综合工单 @Entity @Table(name = "ops_work_order") public class WorkOrder { @Id private UUID id; private UUID projectId; private String orderNo; // 工单编号: WO2024021000001 // 工单类型 private WorkOrderType orderType; // 维修/投诉/保洁/安保/其他 private WorkOrderStatus status; // 状态机 private WorkOrderPriority priority; // 紧急/高/中/低 private WorkOrderSource source; // 来源: APP/电话/巡检/IoT // 基本信息 private String title; private String description; // 报修人信息 private UUID reporterId; private String reporterName; private String reporterPhone; private String reporterAddress; // 关联信息 private UUID spaceNodeId; // 关联空间 private UUID equipmentId; // 关联设备 // 处理人信息 private UUID assigneeId; private String assigneeName; private LocalDateTime assignedAt; private LocalDateTime acceptedAt; private LocalDateTime startedAt; private LocalDateTime completedAt; private LocalDateTime closedAt; // 费用 private BigDecimal actualCost; private BigDecimal materialCost; private BigDecimal laborCost; // 结果 private String resultDescription; private Integer satisfactionScore; private String satisfactionComment; // 附件 private String images; private String attachments; // 扩展属性 private String attributes; } // 实体: WorkOrderFlow - 工单流转记录 @Entity @Table(name = "ops_work_order_flow") public class WorkOrderFlow { @Id private UUID id; private UUID workOrderId; // 流转信息 private WorkOrderStatus fromStatus; private WorkOrderStatus toStatus; private String action; // 操作: 分配/接单/完成/关闭 // 操作人 private UUID operatorId; private String operatorName; private LocalDateTime operateTime; // 备注 private String remark; } ``` **实现状态**: ✅ 已实现 WorkOrder、WorkOrderFlow,包含完整状态机 #### 2.2.3 状态机设计 ``` CREATED(已创建) ↓ [分配] ASSIGNED(已分配) ↓ [接单] ACCEPTED(已接单) ↓ [开始处理] IN_PROGRESS(处理中) ↓ [完成] COMPLETED(已完成) ↓ [关闭] CLOSED(已关闭) 特殊流转: - 任意状态 → SUSPENDED(已挂起) → 恢复 - ASSIGNED → RETURNED(已退回) → 重新分配 ``` **实现状态**: ✅ 状态机已实现,包含所有状态流转 #### 2.2.4 消息通知系统 ```java // 聚合根: NotificationChannel - 通知渠道 @Entity @Table(name = "ops_notification_channel") public class NotificationChannel { @Id private UUID id; private UUID projectId; private String name; private ChannelType type; // 站内信/短信/邮件/推送/企业微信 // 配置(JSONB) private String config; // 渠道配置参数 private Boolean enabled; private Integer priority; // 优先级 } // 聚合根: NotificationTemplate - 消息模板 @Entity @Table(name = "ops_notification_template") public class NotificationTemplate { @Id private UUID id; private UUID projectId; private String name; private String code; // 模板编码 // 模板内容 private String titleTemplate; private String contentTemplate; // 变量定义 private String variables; // ["orderNo", "title", "assigneeName"] // 适用渠道 private String channels; // ["SITE_MESSAGE", "SMS"] } // 聚合根: NotificationRule - 通知规则 @Entity @Table(name = "ops_notification_rule") public class NotificationRule { @Id private UUID id; private UUID projectId; private String name; private String eventType; // 事件类型: WORK_ORDER_CREATED // 触发条件 private String conditions; // JSON条件表达式 // 通知配置 private String templateCode; // 关联模板 private String receivers; // 接收人配置: ["CREATOR", "ASSIGNEE"] private String channels; // 通知渠道 private Boolean enabled; } // 实体: NotificationHistory - 通知历史 @Entity @Table(name = "ops_notification_history") public class NotificationHistory { @Id private UUID id; private UUID projectId; // 通知内容 private String title; private String content; private String eventType; // 接收人 private UUID receiverId; private String receiverName; private String receiverPhone; // 渠道信息 private ChannelType channel; private String channelMsgId; // 渠道消息ID // 状态 private NotificationStatus status; // 待发送/已发送/发送失败/已读 private LocalDateTime sendTime; private LocalDateTime readTime; // 关联业务 private String businessType; private String businessId; } ``` **实现状态**: ✅ 已实现 NotificationChannel、NotificationTemplate、NotificationRule、NotificationHistory #### 2.2.5 工单与通知集成 ```java // 工单事件监听器 @Component public class WorkOrderEventListener { @EventListener public void onWorkOrderCreated(WorkOrderCreatedEvent event) { // 触发通知规则 notificationService.triggerRule("WORK_ORDER_CREATED", event.getWorkOrder()); } @EventListener public void onWorkOrderAssigned(WorkOrderAssignedEvent event) { notificationService.triggerRule("WORK_ORDER_ASSIGNED", event.getWorkOrder()); } } ``` **实现状态**: ✅ 已实现工单与通知系统集成 #### 2.2.6 改进计划 | 优先级 | 改进项 | 说明 | |--------|--------|------| | P2 | 添加工单满意度评价 | 业主对工单处理结果的评价 | | P2 | 实现SLA监控 | 工单超时预警和升级机制 | | P3 | 智能派单算法 | 基于位置、负载、技能的自动派单 | --- ### 2.3 设施设备领域 (ether-asset) #### 2.3.1 领域职责 - 设备台账管理 - 设备维保计划 - 设备故障管理 - 设备与工单联动 #### 2.3.2 核心聚合根设计 ```java // 聚合根: Equipment - 设备台账 @Entity @Table(name = "asset_equipment") public class Equipment { @Id private UUID id; private UUID projectId; private String code; // 设备编码 private String name; // 设备名称 // 分类 private EquipmentType equipmentType; // 电梯/空调/消防/给排水/供配电 private EquipmentStatus status; // 正常/故障/维修中/报废 // 品牌型号 private String brand; private String model; private String specifications; private String serialNumber; // 厂商信息 private String manufacturer; private String supplier; // 位置 private UUID spaceNodeId; private String locationDesc; // 时间 private LocalDate purchaseDate; private LocalDate installDate; private LocalDate warrantyDate; // 维保 private Integer maintenanceCycle; // 保养周期(天) private LocalDate lastMaintenanceDate; private LocalDate nextMaintenanceDate; // 负责人 private UUID managerId; private String managerName; private String contactPhone; // 扩展属性 private Map attributes; } // 聚合根: MaintenancePlan - 维保计划 @Entity @Table(name = "asset_maintenance_plan") public class MaintenancePlan { @Id private UUID id; private UUID projectId; private UUID equipmentId; private String name; private MaintenanceType type; // 日常保养/定期检修/大修 // 周期 private Integer cycleDays; // 周期天数 private String cronExpression; // 内容 private String content; // 保养内容 private String checkItems; // 检查项清单 // 负责人 private UUID maintainerId; private String maintainerName; } // 实体: MaintenanceRecord - 维保记录 @Entity @Table(name = "asset_maintenance_record") 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; // 正常/异常/需维修 private String remark; private String images; // 关联工单 private UUID workOrderId; // 如产生维修工单 } ``` **实现状态**: ✅ 已实现 Equipment,⚠️ MaintenancePlan、MaintenanceRecord 在 ether-mdm 中实现 #### 2.3.3 现有实现与设计方案差异 | 设计项 | 设计方案 | 现有实现 | 差异分析 | |--------|----------|----------|----------| | **Equipment** | 在 ether-asset 服务 | 在 ether-asset 服务 | ✅ 符合设计 | | **MaintenancePlan** | 在 ether-asset 服务 | 在 ether-mdm 服务 | ❌ 领域归属错误 | | **MaintenanceRecord** | 在 ether-asset 服务 | 在 ether-mdm 服务 | ❌ 领域归属错误 | #### 2.3.4 设备与工单联动 ```java // 设备故障自动创建工单 @Component public class EquipmentFaultHandler { @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); } } ``` **实现状态**: ⚠️ 设计已定义,待实现 #### 2.3.5 改进计划 | 优先级 | 改进项 | 说明 | |--------|--------|------| | P1 | 迁移维保相关实体 | 将 MaintenancePlan、MaintenanceRecord 从 ether-mdm 迁移到 ether-asset | | P2 | 实现设备故障自动工单 | 设备状态变更时自动创建维修工单 | | P2 | 添加设备二维码 | 为每台设备生成唯一二维码,支持扫码查看/报修 | | P3 | 设备IoT集成 | 对接传感器数据,实现故障预警 | --- ### 2.4 财务计费领域 (ether-finance) #### 2.4.1 领域职责 - 收费项目管理 - 账单生成与管理 - 支付处理 - 费用催缴通知 #### 2.4.2 核心聚合根设计 ```java // 聚合根: FeeItem - 收费项目 @Entity @Table(name = "fin_fee_item") public class FeeItem { @Id private UUID id; private UUID projectId; private String code; // 项目编码 private String name; // 项目名称 private FeeType type; // 物业费/停车费/水电费/维修基金 // 计费规则 private BillingMethod billingMethod; // 固定金额/按面积/按用量/自定义 private BigDecimal unitPrice; // 单价 private String unit; // 单位: 元/月、元/㎡·月 // 账期 private Integer billDay; // 账单日(每月几号) private Integer dueDay; // 到期日(每月几号) private Integer overdueDay; // 逾期日(每月几号) // 滞纳金 private Boolean enableLateFee; private BigDecimal lateFeeRate; // 滞纳金比例(日) // 状态 private Boolean enabled; } // 聚合根: FeeBill - 收费账单 @Entity @Table(name = "fin_fee_bill") public class FeeBill { @Id private UUID id; private UUID projectId; private String billNo; // 账单编号 // 关联信息 private UUID feeItemId; // 收费项目 private UUID spaceNodeId; // 关联房产 private UUID ownerId; // 关联业主 // 账期 private String billPeriod; // 账期: 2024-02 private LocalDate billDate; // 账单日期 private LocalDate dueDate; // 到期日期 private LocalDate overdueDate; // 逾期日期 // 金额 private BigDecimal amount; // 应收金额 private BigDecimal lateFee; // 滞纳金 private BigDecimal discount; // 优惠金额 private BigDecimal payableAmount; // 应付金额 private BigDecimal paidAmount; // 已付金额 // 状态 private BillStatus status; // 未缴费/部分缴费/已缴费/已逾期/已取消 // 关联支付记录 @OneToMany(mappedBy = "bill") private List payments; } // 实体: FeePayment - 支付记录 @Entity @Table(name = "fin_fee_payment") public class FeePayment { @Id private UUID id; private UUID billId; private String paymentNo; // 支付流水号 private BigDecimal amount; // 支付金额 // 支付方式 private PaymentMethod method; // 微信支付/支付宝/现金/转账 private String thirdPartyNo; // 第三方支付流水号 // 状态 private PaymentStatus status; // 待支付/支付成功/支付失败/已退款 // 时间 private LocalDateTime paymentTime; private String remark; } ``` **实现状态**: ✅ 已实现 FeeItem、FeeBill、FeePayment #### 2.4.3 费用催缴通知 ```java // 定时任务: 费用催缴 @Component public class FeeReminderJob { @Scheduled(cron = "0 0 9 * * ?") // 每天9点执行 public void remindUpcomingDue() { // 查询3天内到期的账单 List upcomingBills = feeBillRepository .findByDueDateBetweenAndStatus(LocalDate.now(), LocalDate.now().plusDays(3), BillStatus.UNPAID); for (FeeBill bill : upcomingBills) { notificationService.sendFeeReminder(bill, "FEE_UPCOMING_DUE"); } } @Scheduled(cron = "0 0 9,18 * * ?") // 每天9点和18点执行 public void remindOverdue() { // 查询已逾期的账单 List overdueBills = feeBillRepository .findByOverdueDateBeforeAndStatus(LocalDate.now(), BillStatus.UNPAID); for (FeeBill bill : overdueBills) { // 计算滞纳金 calculateLateFee(bill); notificationService.sendFeeReminder(bill, "FEE_OVERDUE"); } } } ``` **实现状态**: ✅ 已实现费用催缴定时任务 #### 2.4.4 现有实现与设计方案差异 | 设计项 | 设计方案 | 现有实现 | 差异分析 | |--------|----------|----------|----------| | **FeeItem** | 在 ether-finance 服务 | 在 ether-finance 服务 | ✅ 符合设计 | | **FeeBill** | 在 ether-finance 服务 | ether-finance + ether-mdm 重复 | ❌ 存在重复实体 | | **FeePayment** | 在 ether-finance 服务 | ether-finance + ether-mdm 重复 | ❌ 存在重复实体 | #### 2.4.5 改进计划 | 优先级 | 改进项 | 说明 | |--------|--------|------| | P1 | 清理重复实体 | 删除 ether-mdm 中的 FeeItem、FeeBill、FeePayment | | P2 | 实现退款功能 | 支持账单退款和退款审批流程 | | P2 | 添加财务报表 | 收费统计、欠费分析、收入趋势 | | P3 | 对接支付网关 | 集成微信支付、支付宝 SDK | --- ### 2.5 权限与账户领域 (ether-auth) #### 2.5.1 领域职责 - 用户认证与授权 - RBAC权限模型 - 项目隔离 - 访客凭证管理 #### 2.5.2 核心聚合根设计 ```java // 聚合根: User - 系统用户 @Entity @Table(name = "auth_user") public class User { @Id private UUID id; private String username; private String password; private String salt; // 密码盐值 // 基本信息 private String realName; private String phone; private String email; // 状态 private UserStatus status; private LocalDateTime lastLoginTime; // 关联角色 @ManyToMany @JoinTable(name = "auth_user_role") private List roles; } // 聚合根: Role - 角色 @Entity @Table(name = "auth_role") public class Role { @Id private UUID id; private UUID projectId; private String name; private String code; private RoleType type; // 系统预设/自定义 private DataScope dataScope; // 数据权限范围 // 关联权限 @ManyToMany @JoinTable(name = "auth_role_permission") private List permissions; } // 聚合根: Permission - 权限 @Entity @Table(name = "auth_permission") public class Permission { @Id private UUID id; private String name; private String code; // 权限编码: user:create private PermissionType type; // 菜单/按钮/API // 菜单属性 private String path; // 路由路径 private String component; // 组件路径 private String icon; // 图标 private Integer sortOrder; // 树形结构 private UUID parentId; } ``` **实现状态**: ✅ 已实现 User、Role、Permission、UserRole、RolePermission #### 2.5.3 项目隔离实现 ```java // 项目上下文拦截器 @Component public class ProjectContextInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String projectId = request.getHeader("X-Project-ID"); if (StringUtils.hasText(projectId)) { ProjectContextHolder.setCurrentProjectId(UUID.fromString(projectId)); } return true; } } // 项目上下文持有者 public class ProjectContextHolder { private static final ThreadLocal PROJECT_CONTEXT = new ThreadLocal<>(); public static void setCurrentProjectId(UUID projectId) { PROJECT_CONTEXT.set(projectId); } public static UUID getCurrentProjectId() { return PROJECT_CONTEXT.get(); } } ``` **实现状态**: ✅ 已实现 ProjectContextInterceptor、ProjectContextHolder #### 2.5.4 访客凭证系统 ```java // 访客凭证已在 ether-mdm 的 VisitorAppointment 中实现 // 包含动态二维码生成和过期机制 ``` **实现状态**: ✅ 已实现动态二维码凭证 #### 2.5.5 改进计划 | 优先级 | 改进项 | 说明 | |--------|--------|------| | P2 | 完善数据权限 | 实现基于角色的数据范围控制(全部/部门/个人) | | P3 | 添加操作日志 | 记录用户关键操作,支持审计 | | P3 | 实现单点登录 | 支持多端统一登录态 | --- ### 2.6 集成中心领域 (ether-hub) #### 2.6.1 领域职责 - 外部系统适配(停车系统、门禁系统、政府监管平台) - IoT设备接入 - 数据同步与转换 - 集成日志记录 #### 2.6.2 核心聚合根设计 ```java // 聚合根: IntegrationAdapter - 集成适配器 @Entity @Table(name = "hub_integration_adapter") public class IntegrationAdapter { @Id private UUID id; private UUID projectId; private String name; private String systemType; // PARKING/ACCESS/GOVERNMENT/IOT private String protocol; // HTTP/MQTT/HTTPS/SOAP // 连接配置 private String baseUrl; private String authType; // NONE/API_KEY/OAUTH2/JWT private String authConfig; // 认证配置(JSON) // 状态 private Boolean enabled; private AdapterStatus status; // 在线/离线/错误 private LocalDateTime lastPingTime; } // 实体: IntegrationLog - 集成日志 @Entity @Table(name = "hub_integration_log") public class IntegrationLog { @Id private UUID id; private UUID adapterId; // 请求信息 private String requestId; private String operation; // 操作类型 private String requestData; // 请求数据 // 响应信息 private String responseData; // 响应数据 private Integer httpStatus; // HTTP状态码 private String errorMessage; // 错误信息 // 时间 private LocalDateTime requestTime; private LocalDateTime responseTime; private Long durationMs; // 耗时 // 状态 private LogStatus status; // 成功/失败/超时 } // IoT设备接入 @Entity @Table(name = "hub_iot_device") public class IoTDevice { @Id private UUID id; private UUID projectId; private String deviceId; // 设备唯一标识 private String deviceType; // 传感器类型 private String protocol; // MQTT/CoAP/HTTP // 关联信息 private UUID equipmentId; // 关联设备台账 // MQTT配置 private String mqttTopic; // 订阅主题 private String lastPayload; // 最后上报数据 private LocalDateTime lastReportTime; // 状态 private DeviceStatus status; // 在线/离线/故障 } ``` **实现状态**: 🔴 未实现,需要新建 ether-hub 微服务 #### 2.6.3 集成场景 | 集成系统 | 协议 | 功能 | |---------|------|------| | 停车系统 | HTTP API | 车牌识别、车位状态同步 | | 门禁系统 | HTTP/MQTT | 访客二维码下发、通行记录上报 | | 政府监管 | HTTP API | 投诉工单同步、数据上报 | | IoT传感器 | MQTT | 实时数据采集、故障报警 | #### 2.6.4 改进计划 | 优先级 | 改进项 | 说明 | |--------|--------|------| | P2 | 创建 ether-hub 服务 | 新建集成中心微服务 | | P3 | 实现停车系统集成 | 对接停车系统API | | P3 | 实现门禁系统集成 | 对接门禁系统,支持访客二维码 | | P3 | 实现IoT接入 | MQTT Broker配置,设备接入 | --- ## 三、领域间关系图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 前端层 (B端/C端/G端) │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ API网关 (ether-gateway) │ │ JWT认证 / 限流 / 路由转发 │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────┼─────────────────────┐ │ │ │ ┌───────▼──────┐ ┌────────▼────────┐ ┌──────▼──────┐ │ ether-auth │ │ ether-mdm │ │ ether-ops │ │ 权限与账户 │◄──►│ 空间与主数据 │◄──►│ 运营调度 │ │ │ │ │ │ │ │ • User │ │ • SpaceNode │ │ • WorkOrder │ │ • Role │ │ • RoomDetail │ │ • Notification│ │ • Permission │ │ • Owner │ │ │ └──────────────┘ │ • Visitor │ └─────────────┘ │ │ • Inspection │ │ │ └─────────────────┘ │ │ │ │ │ ┌────────────────┼────────────────┐ │ │ │ │ │ │ ┌───────▼────▼───┐ ┌────────▼────────┐ ┌────▼─▼──────┐ │ ether-asset │ │ ether-finance │ │ ether-hub │ │ 设施设备 │ │ 财务计费 │ │ 集成中心 │ │ │ │ │ │ │ │ • Equipment │ │ • FeeItem │ │ • Adapter │ │ • Maintenance │ │ • FeeBill │ │ • IoTDevice │ │ │ │ • FeePayment │ │ │ └────────────────┘ └─────────────────┘ └─────────────┘ ``` --- ## 四、总体差异分析汇总 ### 4.1 领域归属差异 | 实体 | 设计归属 | 实际归属 | 差异等级 | |------|----------|----------|----------| | EquipmentMaintenance | ether-asset | ether-mdm | 🔴 高 | | FeeItem/FeeBill/FeePayment | ether-finance | ether-mdm + ether-finance | 🔴 高 | | InspectionPlan/Task | ether-ops | ether-mdm | 🟡 中 | | VisitorAppointment | ether-ops | ether-mdm | 🟡 中 | ### 4.2 缺失实现 | 领域 | 缺失内容 | 优先级 | |------|----------|--------| | ether-hub | 整个微服务未创建 | P2 | | ether-asset | MaintenancePlan/Record 迁移 | P1 | | ether-finance | 退款功能、财务报表 | P2 | | ether-ops | SLA监控、智能派单 | P3 | ### 4.3 技术实现差异 | 设计项 | 设计方案 | 实际实现 | 影响 | |--------|----------|----------|------| | 空间坐标 | PostGIS geometry | longitude/latitude | 功能降级 | | 树形结构 | PostgreSQL ltree | 字符串路径 | 性能影响 | | 设备联动 | 事件驱动 | 未实现 | 功能缺失 | --- ## 五、改进路线图 ### Phase 1: 领域归属调整(1-2周) 1. **迁移 Maintenance 相关实体** - 将 EquipmentMaintenance 从 ether-mdm 迁移到 ether-asset - 更新外键关联和查询逻辑 2. **清理财务重复实体** - 删除 ether-mdm 中的 FeeItem、FeeBill、FeePayment - 统一使用 ether-finance 的实体 3. **调整巡检和访客归属** - 评估是否需要将 Inspection、Visitor 迁移到 ether-ops - 或保持现状,在文档中明确领域边界 ### Phase 2: 功能完善(2-4周) 1. **创建设备联动** - 实现设备故障自动创建工单 - 工单完成后更新设备状态 2. **完善财务功能** - 实现退款功能 - 添加财务报表 3. **增强权限系统** - 实现数据权限范围控制 - 添加操作日志 ### Phase 3: 集成中心(4-6周) 1. **创建 ether-hub 服务** - 基础框架搭建 - 数据库表设计 2. **实现停车系统集成** - 对接停车系统API - 车位状态同步 3. **实现门禁集成** - 访客二维码下发 - 通行记录上报 --- ## 六、文档维护 **维护原则**: - 每次领域调整时更新本文档 - 新增实体时必须明确领域归属 - 定期(每季度)审查领域边界 **更新记录**: | 版本 | 日期 | 更新内容 | 作者 | |------|------|----------|------| | v1.0 | 2026-02-10 | 初始版本,汇总各领域实现状态与差异 | - |