详细设计说明书 (LLD)
详细设计说明书 (LLD) v4.0
项目名称:工业miniAPP (IndustrialMiniAPP)
基于文档:SRS V4.0 (P0核心功能)、工业miniAPP开发赛项赛题、iDME开发/用户指南(1.24.090-HCS)
核心优化:补充优先级定义、强化iDME规范结合度、完善功能与文档一致性
1. 引言
1.1 编写目的
本说明书旨在定义“精密行星减速器工业miniAPP”的技术实现细节,包括后端类结构、核心业务算法、xDM-F数据模型精确映射、前端组件状态管理、权限控制及实时交互机制。作为Vibe Coding的上下文输入,确保代码符合业务规则、赛题要求及iDME开发规范,实现与SRS功能的全面映射及iDME平台的深度集成,完全满足部署与验证需求。
1.2 范围、优先级与iDME结合度说明
| 优先级 | 核心内容 | 说明 | iDME结合度 | 结合点详情 |
|---|---|---|---|---|
| P0(必须实现) | 设备管理、物料管理、工序管理、基础工艺设计、xDM-F核心适配 | 覆盖SRS定义的MVP级功能,满足赛题基础要求,确保应用可部署验证 | 强 | 1. 遵循xDM-F实体属性定义与API调用规范;2. 启用树形结构(物料分类)、版本服务(物料版本)核心功能;3. 适配iDME认证鉴权(Token传递) |
| P1(重要扩展) | 权限管理(RBAC)、工艺模板复用、库存校验、完善错误处理 | 基于iDME权限规范与SRS扩展需求,提升系统安全性与实用性 | 中-强 | 1. 集成iDME租户权限与batchHasAccess鉴权接口;2. 遵循iDME生命周期管理(工艺状态流转);3. 基于xDM-F批量查询接口实现库存校验 |
| P2(优化增强) | 实时通信(WebSocket)、版本对比、多维视图支持 | 优化用户体验,满足复杂场景下的差异化管理需求 | 中 | 1. 基于iDME版本比较接口(compareBusinessVersion)实现版本对比;2. 适配多维视图接口(createView/revise);3. 结合iDME事件通知机制实现实时数据同步 |
2. 系统架构详细设计
2.1 后端工程结构(新增权限与实时通信模块)
com.huawei.idme.miniapp
├── config # 配置类
│ ├── XdmfConfig.java # xDM-F SDK配置(补充Token传递与iDME权限适配,P0)
│ ├── WebSocketConfig.java # 实时通信配置(P2)
│ └── SecurityConfig.java # 权限控制配置(集成iDME鉴权,P1)
├── controller # 控制层
│ ├── EquipmentController.java(P0,适配iDME设备实体API)
│ ├── PartController.java(P0,适配iDME物料与分类API)
│ ├── ProcedureController.java(P0,适配iDME工序实例API)
│ ├── WorkingPlanController.java(P0,核心工艺API与iDME生命周期绑定)
│ └── AuthController.java # 权限管理接口(集成iDME批量鉴权,P1)
├── dto # 数据传输对象
│ ├── request # 请求DTO
│ │ ├── EquipmentCreateReq.java(P0,字段与xDM-F Equipment实体对齐)
│ │ ├── SaveProcessDesignReq.java (核心,P0,适配iDME关系实体创建规范)
│ │ ├── SubmitPlanReq.java(P0,关联iDME生命周期状态更新)
│ │ ├── PartSearchReq.java(P0,适配xDM-F find接口查询参数)
│ │ ├── PartCategoryReq.java(P0,适配xDM-F树形结构创建参数)
│ │ ├── RoleAssignReq.java # 角色分配请求(P1,关联iDME用户角色API)
│ │ └── ProcessTemplateReq.java # 工艺模板请求(P1,基于xDM-F实例创建规范)
│ └── response # 响应VO
│ ├── BaseResponse.java (含code, msg, requestId,P0,适配iDME响应格式)
│ ├── EquipmentVO.java(P0,与xDM-F Equipment实体属性映射)
│ ├── PartVO.java(P0,与xDM-F Part实体属性映射)
│ ├── PartCategoryVO.java(P0,与xDM-F树形分类实体映射)
│ ├── ProcessRouteVO.java(P0,与xDM-F ProcessRoute实体映射)
│ ├── RoleVO.java(P1,适配iDME角色权限返回格式)
│ └── ProcessTemplateVO.java(P1,基于xDM-F实例响应规范)
├── service # 业务逻辑层
│ ├── XdmfApiClient.java # xDM-F SDK封装工具类(P0+P1,封装iDME全量数据服务API)
│ ├── EquipmentService.java(P0,调用xDM-F设备CRUD与关系查询接口)
│ ├── PartService.java(P0,调用xDM-F物料版本与库存接口,补充P1库存校验)
│ ├── PartCategoryService.java(P0,调用xDM-F树形分类创建与查询接口)
│ ├── WorkingPlanService.java (核心,P0,调用xDM-F工艺与关系实体接口)
│ ├── AuthService.java # 权限管理服务(P1,集成iDME batchHasAccess接口)
│ ├── ProcessTemplateService.java # 工艺模板服务(P1,基于xDM-F实例保存规范)
│ └── WebSocketService.java # 实时通信服务(P2,监听iDME事件通知)
├── entity # 数据实体扩展
│ ├── PartCategory.java(P0,与xDM-F树形分类实体属性对齐)
│ ├── ProcessRoute.java(P0,与xDM-F工艺路线实体属性对齐)
│ ├── Role.java # 角色实体(P1,适配iDME用户角色模型)
│ ├── UserRoleRel.java # 用户-角色关联实体(P1,适配iDME权限关联规范)
│ └── ProcessTemplate.java # 工艺模板实体(P1,基于xDM-F实例扩展)
└── exception # 异常处理
├── BusinessException.java(P0,映射iDME错误码格式)
└── GlobalExceptionHandler.java (P0,捕获iDME API调用异常并转换为统一错误码)
2.2 前端工程结构(新增权限与实时交互模块)
src/
├── api # API 封装(均适配iDME接口规范)
│ ├── equipment.js(P0,调用iDME设备实体API)
│ ├── workingPlan.js(P0,调用iDME工艺与生命周期API)
│ ├── part.js(P0,调用iDME物料与版本API)
│ ├── partCategory.js(P0,调用iDME树形分类API)
│ ├── auth.js # 权限相关API(P1,调用iDME鉴权与角色API)
│ └── processTemplate.js # 工艺模板API(P1,基于iDME实例API封装)
├── components # 公共组件
│ ├── ExtAttrsForm.vue # 扩展属性动态表单(P0,适配xDM-F扩展属性格式)
│ ├── PermissionGuard.vue # 权限守卫组件(P1,集成iDME权限校验结果)
│ └── ProcessTemplateForm.vue # 工艺模板表单(P1,遵循iDME实例创建参数规范)
├── views # 页面
│ ├── equipment
│ │ └── EquipmentList.vue(P0,展示iDME设备实体查询结果)
│ ├── part
│ │ ├── PartList.vue(P0,展示iDME物料查询结果)
│ │ └── PartCategory.vue(P0,适配iDME树形分类展示)
│ ├── workingPlan
│ │ ├── DesignCanvas.vue # 工艺设计画布 (核心交互,P0,调用iDME关系实体创建API)
│ │ ├── RouteList.vue(P0,展示iDME工艺路线实例)
│ │ └── TemplateList.vue # 工艺模板列表(P1,基于iDME实例查询结果展示)
│ └── system
│ ├── RoleManagement.vue # 角色管理页面(P1,适配iDME角色管理API)
│ └── UserRoleAssign.vue # 用户角色分配页面(P1,调用iDME权限关联API)
└── store # Pinia 状态管理
├── useEquipmentStore.js(P0,同步iDME设备实体数据)
├── usePlanStore.js(P0,同步iDME工艺与生命周期状态)
├── usePartStore.js(P0,同步iDME物料与分类数据)
└── useAuthStore.js # 权限状态管理(P1,缓存iDME鉴权结果)
3. 模块详细设计
3.1 设备管理模块(增强iDME适配与错误处理)
3.1.1 类设计补充
EquipmentController 新增接口:
getEquipmentRealTimeStatus(String equipmentId): 获取设备实时状态(P2,通过iDME事件通知+WebSocket推送)。
EquipmentService 补充方法:
notifyStatusChange(EquipmentVO equipment): 设备状态变更后,同步更新iDME生命周期状态并通知前端。checkStockDependency(String equipmentId): 检查设备关联物料的库存依赖(P1,调用iDME物料查询接口)。
3.1.2 核心业务逻辑优化:状态变更与iDME集成
public void updateStatus(String equipmentId, String newStatus, String operator) {
// 1. 权限校验:调用iDME批量鉴权接口
authService.checkPermission(operator, "EQUIPMENT_STATUS_UPDATE");
// 2. 校验状态合法性(与iDME生命周期状态对齐)
if (!Arrays.asList("RUNNING", "STOPPED", "MAINTENANCE", "SCRAPPED").contains(newStatus)) {
throw new BusinessException("E001", "设备状态不合法(iDME生命周期状态约束)");
}
// 3. 校验是否被工艺引用(调用iDME关系实体查询接口)
if ("STOPPED".equals(newStatus) || "SCRAPPED".equals(newStatus)) {
boolean isUsed = xdmfApiClient.checkRelationExists("Rel_Procedure_Resource", "targetId", equipmentId);
if (isUsed) {
throw new BusinessException("E002", "设备被工艺引用,禁止停机/报废(iDME关系实体约束)");
}
}
// 4. 调用iDME设备实体更新接口
Map<String, Object> updateParams = new HashMap<>();
updateParams.put("status", newStatus);
updateParams.put("lastModifiedBy", operator);
xdmfApiClient.updateEntity("Equipment", equipmentId, updateParams);
// 5. 同步iDME生命周期状态
xdmfApiClient.updateLifecycleState("Equipment", equipmentId, mapStatusToLifecycle(newStatus));
// 6. 实时通知相关模块
EquipmentVO updatedEq = xdmfApiClient.getEntityById("Equipment", equipmentId, EquipmentVO.class);
webSocketService.broadcastEquipmentStatus(updatedEq);
}
3.1.3 iDME结合点说明
实体映射:
Equipment实体属性完全对齐iDME xDM-F规范,brand、specification等赛题补充字段通过xDM-F扩展属性或自定义字段实现。API调用:所有设备操作(新增、更新、查询)均调用iDME全量数据服务API,遵循
POST /rdm_{appID}_app/services/dynamic/api/{entityName}/{operation}格式。生命周期绑定:设备状态与iDME生命周期模板关联,状态变更同步触发生命周期阶段更新。
3.2 物料管理模块(新增库存校验与iDME版本控制)
3.2.1 类设计补充
PartController 新增接口:
checkStock(String partId, BigDecimal requiredQuantity): 校验物料库存(P1,调用iDME物料查询接口)。listPartVersions(String partId): 查询物料历史版本(P1,调用iDME版本比较接口)。
PartService 补充方法:
validateStock(String partId, BigDecimal requiredQuantity): 库存充足性校验(P1,基于iDME物料实例查询结果)。syncWithXdmfVersion(String partId): 与iDME版本服务同步(P0,调用saveAs接口实现版本升版)。
3.2.2 核心业务逻辑:库存校验与iDME版本管理
// 库存校验逻辑(工艺提交前触发)
public void validateStock(String partId, BigDecimal requiredQuantity) {
// 1. 调用iDME物料实例查询接口获取最新数据
PartVO part = xdmfApiClient.getEntityById("Part", partId, PartVO.class);
if (part == null) {
throw new BusinessException("P008", "物料不存在(iDME实例查询无结果)");
}
// 2. 校验物料状态(遵循iDME生命周期约束)
if ("DISABLED".equals(part.getStatus()) || "OBSOLETE".equals(part.getLifecycleState())) {
throw new BusinessException("P005", "物料【" + part.getName() + "】已禁用或过期,不可使用");
}
// 3. 校验库存数量
if (part.getStockQuantity().compareTo(requiredQuantity) < 0) {
throw new BusinessException("P006", "物料【" + part.getName() + "】库存不足,当前库存:" + part.getStockQuantity() + ",所需数量:" + requiredQuantity);
}
}
// 物料版本升版逻辑(基于iDME saveAs接口)
public PartVO saveAsVersion(String partId) {
// 1. 查询原物料信息(调用iDME实例查询接口)
PartVO oldPart = xdmfApiClient.getEntityById("Part", partId, PartVO.class);
// 2. 生成新版本号(遵循iDME版本命名规范)
String newVersion = generateNewVersion(oldPart.getVersion());
// 3. 调用iDME另存版本接口创建新版本
Map<String, Object> saveAsParams = new HashMap<>();
saveAsParams.put("sourceInstanceId", partId);
saveAsParams.put("version", newVersion);
saveAsParams.put("modifier", SecurityContextHolder.getContext().getAuthentication().getName());
String newPartId = xdmfApiClient.saveAsEntity("Part", saveAsParams);
return xdmfApiClient.getEntityById("Part", newPartId, PartVO.class);
}
3.2.3 iDME结合点说明
版本服务集成:物料版本管理完全依赖iDME M-V模型,通过
saveAs接口实现版本复制,revise接口实现版本修订。树形分类适配:物料分类使用iDME树形结构功能,
fullPath字段由iDME系统自动生成,分类创建调用POST /rdm_{appID}_app/services/dynamic/api/PartCategory/create接口。库存同步:库存数量通过iDME实例更新接口维护,工艺提交前调用iDME查询接口获取实时库存数据。
3.3 工序管理模块(补充iDME模板复用)
3.3.1 类设计补充
ProcedureController 新增接口:
saveAsTemplate(List<ProcedureItem> items, String templateName): 保存工序模板(P1,基于iDME实例创建规范)。getTemplateById(String templateId): 获取工艺模板(P1,调用iDME模板实例查询接口)。
ProcedureService 补充方法:
validateTemplate(String templateId): 校验模板有效性(P1,调用iDME实例查询接口检查关联设备/物料状态)。applyTemplate(String templateId, String planId): 应用工艺模板(P1,调用iDME关系实体批量创建接口)。
3.3.2 iDME结合点说明
工序初始化:系统启动时预置的5道工序,通过iDME实例创建接口写入xDM-F,确保工序编码与iDME业务编码生成规则一致。
模板存储:工艺模板以iDME自定义实例形式存储,关联工序与资源的关系数据通过iDME关系实体接口维护。
3.4 工艺管理模块 - 核心模块(增强iDME生命周期与关系管理)
3.4.1 DTO设计补充(适配iDME接口参数)
@Data
public class SubmitPlanReq {
private String planId;
private String operator;
private List<ProcessMaterialReq> materials; // 工艺所需物料清单
private String lifecycleState; // 目标iDME生命周期状态(如Submitted)
}
@Data
public class ProcessMaterialReq {
private String partId;
private BigDecimal quantity;
private String partVersion; // 关联iDME物料版本
}
3.4.2 WorkingPlanService 核心算法优化(iDME集成)
@Transactional(rollbackFor = Exception.class)
public void submitPlan(SubmitPlanReq req) {
String planId = req.getPlanId();
// 1. 校验工艺状态(调用iDME生命周期查询接口)
WorkingPlanVO plan = xdmfApiClient.getEntityById("WorkingPlan", planId, WorkingPlanVO.class);
if (!"Draft".equals(plan.getLifecycleState())) {
throw new BusinessException("P002", "非草稿状态不可提交(iDME生命周期约束)");
}
// 2. 权限校验:调用iDME批量鉴权接口
authService.checkPermission(req.getOperator(), "PROCESS_SUBMIT");
// 3. 物料库存与状态校验(调用iDME物料查询接口)
for (ProcessMaterialReq material : req.getMaterials()) {
partService.validateStock(material.getPartId(), material.getQuantity());
}
// 4. 设备状态校验(调用iDME设备查询接口)
List<ProcedureItem> procedures = plan.getProcedures();
for (ProcedureItem item : procedures) {
for (ResourceItem res : item.getResources()) {
if ("DEVICE".equals(res.getTargetType())) {
EquipmentVO eq = xdmfApiClient.getEntityById("Equipment", res.getTargetId(), EquipmentVO.class);
if (!"RUNNING".equals(eq.getStatus()) || !"ACTIVE".equals(eq.getLifecycleState())) {
throw new BusinessException("E004", "设备【" + eq.getName() + "】非运行状态,工艺不可提交");
}
}
}
}
// 5. 更新工艺状态与iDME生命周期
Map<String, Object> updateParams = new HashMap<>();
updateParams.put("status", "Submitted");
updateParams.put("lifecycleState", req.getLifecycleState());
updateParams.put("submitter", req.getOperator());
xdmfApiClient.updateEntity("WorkingPlan", planId, updateParams);
// 6. 实时通知工艺状态变更
webSocketService.broadcastPlanStatus(planId, "Submitted");
}
3.4.3 iDME结合点说明
生命周期绑定:工艺状态流转与iDME生命周期模板强绑定,通过
updateLifecycleState接口同步状态。关系实体管理:工艺-工序、工序-资源的关联关系,通过iDME关系实体(Plan_Procedure_Rel、Procedure_Resource_Rel)接口创建与删除。
版本对比:工艺版本对比依赖iDME
compareBusinessVersion接口,支持不同版本工序与资源关联差异展示。
3.5 权限管理模块(集成iDME RBAC)
3.5.1 核心业务逻辑(基于iDME鉴权接口)
@Service
public class AuthService {
// 权限校验(集成iDME batchHasAccess接口)
public void checkPermission(String userId, String permissionCode) {
// 1. 调用iDME批量鉴权接口
Map<String, Object> authParams = new HashMap<>();
authParams.put("userId", userId);
authParams.put("rdmExtensionType", "SystemPermission");
authParams.put("operations", Collections.singletonList(permissionCode));
authParams.put("ids", Collections.singletonList(permissionCode));
Map<String, Boolean> authResult = xdmfApiClient.batchHasAccess(authParams);
Boolean hasPermission = authResult.get(permissionCode);
if (hasPermission == null || !hasPermission) {
throw new BusinessException("A002", "用户无【" + permissionCode + "】权限,操作被拒绝(iDME鉴权结果)");
}
}
// 分配角色(调用iDME用户角色关联接口)
public void assignRole(RoleAssignReq req, String operator) {
// 1. 校验操作员权限
this.checkPermission(operator, "ROLE_ASSIGN");
// 2. 调用iDME接口删除原有关联
xdmfApiClient.deleteRelation("UserRoleRel", "userId", req.getUserId());
// 3. 调用iDME接口创建新关联
Map<String, Object> relParams = new HashMap<>();
relParams.put("userId", req.getUserId());
relParams.put("roleId", req.getRoleId());
xdmfApiClient.createRelation("UserRoleRel", relParams);
}
}
3.5.2 iDME结合点说明
鉴权集成:完全依赖iDME
batchHasAccess接口实现权限校验,不重复开发权限存储逻辑。角色管理:用户-角色关联关系通过iDME关系实体接口维护,角色权限定义遵循iDME权限模型规范。
3.6 实时通信模块(结合iDME事件通知)
3.6.1 核心逻辑实现(适配iDME事件机制)
@Service
public class WebSocketService {
@Autowired
private SimpMessagingTemplate messagingTemplate;
// 推送设备状态变更(监听iDME设备实例更新事件)
public void broadcastEquipmentStatus(EquipmentVO equipment) {
messagingTemplate.convertAndSend("/topic/equipment/status/" + equipment.getId(), equipment);
}
// 推送工艺状态变更(监听iDME工艺生命周期变更事件)
public void broadcastPlanStatus(String planId, String status) {
WorkingPlanVO plan = xdmfApiClient.getEntityById("WorkingPlan", planId, WorkingPlanVO.class);
Map<String, Object> msg = new HashMap<>();
msg.put("planId", planId);
msg.put("planName", plan.getPlanName());
msg.put("status", status);
msg.put("lifecycleState", plan.getLifecycleState());
msg.put("timestamp", LocalDateTime.now());
messagingTemplate.convertAndSend("/topic/plan/status/" + planId, msg);
}
}
3.6.2 iDME结合点说明
事件监听:实时数据同步基于iDME实例更新事件,通过接口轮询或WebHook实现事件捕获。
* 数据一致性:推送的状态数据均来自iDME查询接口,确保前端与iDME平台数据一致。
4. 数据库详细设计(强化iDME数据模型适配)
4.1 xDM-F 实体属性详单(完全对齐iDME规范)
| 英文名 | 中文名 | 类型 | 长度 | 约束 | SRS对应 | 赛题补充 | iDME结合说明 |
|---|---|---|---|---|---|---|---|
| Equipment | 绑定iDME Equipment实体,启用生命周期管理 | ||||||
| equipmentCode | 设备编码 | Text | 50 | PK, 必填 | FR-01-01 | 遵循iDME业务编码生成规则 | |
| status | 设备状态 | Text | 20 | 枚举 | FR-01-03 | 与iDME生命周期状态关联 | |
| extAttrs | 扩展属性 | JSON | - | 结构化JSON | FR-01-02 | 符合xDM-F扩展属性格式要求 | |
| brand | 品牌 | Text | 50 | 必填 | 赛题要求 | 通过xDM-F自定义字段实现 | |
| specification | 规格型号 | Text | 100 | 必填 | 赛题要求 | 通过xDM-F自定义字段实现 | |
| location | 位置 | Text | 100 | 必填 | 赛题要求 | 通过xDM-F自定义字段实现 | |
| supplier | 供应商 | Text | 100 | 必填 | 赛题要求 | 通过xDM-F自定义字段实现 | |
| Part | 绑定iDME Part实体,启用版本服务 | ||||||
| partCode | 物料编码 | Text | 50 | PK, 必填 | FR-02-01 | 遵循iDME业务编码生成规则 | |
| isResource | 资源类型 | Boolean | - | True/False | FR-02-04 | 与iDME资源类型字段一致 | |
| stockQuantity | 库存数量 | Numeric | - | 非负 | 赛题要求 | 通过xDM-F自定义字段实现,支持实例更新接口 | |
| stockWarningThreshold | 库存预警阈值 | Numeric | - | 非负 | 新增 | 通过xDM-F扩展属性实现 | |
| supplier | 供应商 | Text | 100 | 必填 | 赛题要求 | 通过xDM-F自定义字段实现 | |
| categoryId | 分类ID | Text | 50 | 关联PartCategory | 赛题要求 | 绑定iDME树形分类实体ID | |
| version | 版本 | Text | 20 | 格式x.x | 赛题要求 | 启用iDME版本服务,版本号由iDME维护 | |
| PartCategory | 绑定iDME树形结构实体 | ||||||
| id | 分类ID | Text | 50 | PK, 必填 | 赛题要求 | 遵循iDME树形节点ID生成规则 | |
| name | 分类名称 | Text | 100 | 唯一, 必填 | 赛题要求 | 符合iDME分类名称命名规范 | |
| parentId | 父分类ID | Text | 50 | 可为空 | 赛题要求 | 绑定iDME树形结构父节点ID | |
| fullPath | 全路径 | Text | 200 | 系统生成 | 树形结构需求 | 由iDME自动生成,支持树形查询 |
4.2 关系实体设计(完全遵循iDME关系规范)
| 关系名 | 源实体 | 目标实体 | 扩展属性 | 逻辑说明 | iDME结合说明 |
|---|---|---|---|---|---|
| Plan_Procedure_Rel | WorkingPlan | WorkingProcedure | sequence (Int) | 定义工序顺序 | 调用iDME关系实体创建接口,扩展属性通过自定义字段实现 |
| Procedure_Resource_Rel | Plan_Procedure_Rel | 多态 | targetType, targetId, quantity | 关联具体资源 | 支持iDME多态目标实体关联,遵循关系实体参数规范 |
| Part_Category_Rel | Part | PartCategory | - | 物料与分类的多对一关系 | 由iDME树形结构自动维护,无需手动创建 |
| User_Role_Rel | User | Role | - | 用户与角色的多对多关系 | 调用iDME关系实体CRUD接口,符合权限关联规范 |
4.3 xDM-F 模型配置(完全适配iDME功能)
| 实体 | 功能配置 | 配置说明 | iDME结合度 |
|---|---|---|---|
| PartCategory | 树形结构 | 指定 fullPath 为全路径字段 | 强 |
| WorkingPlan | 生命周期管理 | 绑定 Draft→Submitted→Published→Cancelled 生命周期模板 | 强 |
| Part | 版本服务 | 启用 M-V 模型,支持版本追溯与修订 | 强 |
| Equipment | 生命周期管理 | 绑定 Draft→Running→Maintenance→Stopped→Scrapped 生命周期模板 | 强 |
| ProcessTemplate | 文件夹管理 | 支持按文件夹分类存储模板 | 中 |
| Role | 权限管理 | 关联iDME租户权限,支持数据级权限控制 | 中 |
5. 接口设计详细定义(完全对齐iDME API规范)
5.1 通用响应结构(适配iDME返回格式)
所有后端接口返回的数据必须封装为 BaseResponse,错误码遵循“iDME错误码+业务错误码”双重映射。
5.2 核心接口列表(均遵循iDME API规范)
API-01: 设备状态实时查询(P0)
URL:
GET /api/equipments/{equipmentId}/real-time-statusiDME依赖接口:
GET /rdm_{appID}_app/services/dynamic/api/Equipment/{equipmentId}Response: 与iDME设备实例返回格式一致
API-02: 物料库存校验(P1)
URL:
POST /api/parts/check-stockiDME依赖接口:
GET /rdm_{appID}_app/services/dynamic/api/Part/{partId}Exception Handling: 集成iDME实例查询异常处理
API-03: 工艺提交(P0)
URL:
POST /api/plans/submitiDME依赖接口:
GET /rdm_{appID}_app/services/dynamic/api/WorkingPlan/{planId}(状态校验)POST /rdm_{appID}_app/services/dynamic/api/WorkingPlan/update(状态更新)POST /rdm_{appID}_app/services/rdm/basic/api/LifecycleTemplate/updateLifecycleInfo(生命周期同步)
Request: 包含iDME生命周期状态参数
API-04: 角色分配(P1)
URL:
POST /api/auth/assign-roleiDME依赖接口:
POST /rdm_{appID}_app/services/rdm/basic/api/AccessService/batchHasAccess(权限校验)POST /rdm_{appID}_app/services/dynamic/api/UserRoleRel/create(关系创建)
Request: 符合iDME关系实体创建参数规范
API-05: 工艺版本对比(P2)
URL:
POST /api/plans/compare-versionsiDME依赖接口:
POST /rdm_{appID}_app/publicservices/api/WorkingPlan/compareBusinessVersion
* Response: 基于iDME版本对比结果格式化
6. 前端详细设计(强化iDME交互适配)
6.1 状态管理补充(同步iDME数据)
useAuthStore.js:
import { defineStore } from 'pinia';
export const useAuthStore = defineStore('auth', {
state: () => ({
currentUser: null,
userRoles: [],
userPermissions: []
}),
actions: {
// 加载用户权限(调用iDME鉴权接口)
async loadUserAuth() {
const res = await api.getUserPermissions();
if (res.code === '0000') {
this.currentUser = res.data.user;
this.userRoles = res.data.roles;
this.userPermissions = res.data.permissions;
}
},
// 检查是否有权限(基于iDME鉴权结果)
hasPermission(permissionCode) {
return this.userPermissions.includes(permissionCode);
}
}
});
6.2 核心组件设计补充(适配iDME交互规范)
Component: DesignCanvas.vue(工艺设计画布优化)
iDME交互适配: 调用iDME资源查询接口加载可用设备/物料,实时同步iDME状态。
生命周期联动: 工艺状态变更时,同步展示iDME生命周期阶段。
Component: PartCategory.vue(物料分类页面)
iDME树形适配: 使用iDME树形结构查询接口返回的
fullPath字段构建分类层级。
* 操作规范: 新增/编辑分类时,严格遵循iDME树形节点创建参数规范。
7. 安全与性能设计(适配iDME规范)
7.1 异常处理全局化(映射iDME错误码)
错误码映射: 捕获iDME API调用异常(如AS.0001格式错误),转换为系统统一错误码。
异常描述: 错误提示包含iDME原始错误信息,便于问题定位。
7.2 缓存策略优化(结合iDME缓存机制)
后端缓存: 对iDME高频查询接口(如设备列表、物料分类)结果设置缓存,缓存时间与iDME数据更新频率对齐。
前端缓存: 缓存iDME鉴权结果、树形分类数据,减少重复调用。
7.3 权限控制(完全依赖iDME)
接口权限: 所有核心接口均通过iDME
batchHasAccess接口校验权限,不重复开发权限逻辑。
* 数据权限: 基于iDME租户权限,过滤用户可访问的设备、物料数据。
8. 部署与环境配置(适配iDME部署规范)
8.1 application.yml 关键配置(iDME相关)
spring:
application:
name: industrial-miniapp
websocket:
broker:
enable: true
prefix: /topic
xdmf:
endpoint: http://127.0.0.1:8080/rdm_IndustrialMiniAPP_app/services/dynamic/api
public-endpoint: http://127.0.0.1:8080/rdm_IndustrialMiniAPP_app/publicservices/api
app-id: IndustrialMiniAPP # iDME应用ID
token: ${XDM_AUTH_TOKEN:your_default_token} # iDME认证Token
cache:
equipmentPoolExpire: 600 # 设备池缓存过期时间(与iDME数据更新频率匹配)
partCategoryExpire: 600 # 物料分类缓存过期时间
rolePermissionExpire: 1800 # 角色权限缓存过期时间(与iDME权限更新频率匹配)
security:
idme:
auth-endpoint: http://127.0.0.1:8080/rdm_IndustrialMiniAPP_app/services/rdm/basic/api/AccessService/batchHasAccess
9. 附录:开发检查清单(强化iDME适配校验)
所有实体属性是否与iDME xDM-F模型完全对齐?
所有API调用是否遵循iDME全量数据服务接口规范(URL格式、参数、响应)?
权限控制是否完全依赖iDME鉴权接口,无重复开发?
版本管理、树形结构、生命周期等功能是否启用iDME原生能力?
错误处理是否映射iDME错误码,异常信息是否包含iDME原始描述?
缓存策略是否与iDME数据更新频率匹配,避免数据不一致?
前端展示数据是否均来自iDME查询接口,确保与平台同步?
工艺路线生成是否符合iDME关系实体创建规范,关联关系是否完整?
WebSocket实时推送是否基于iDME事件,数据一致性是否保障?
部署配置中的iDME Endpoint、AppID、Token是否正确配置? *


评论