无权限

Derrick博客站

详细设计说明书 (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               # 权限相关APIP1,调用iDME鉴权与角色API
│   └── processTemplate.js    # 工艺模板APIP1,基于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规范,brandspecification等赛题补充字段通过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设备编码Text50PK, 必填FR-01-01遵循iDME业务编码生成规则
status设备状态Text20枚举FR-01-03与iDME生命周期状态关联
extAttrs扩展属性JSON-结构化JSONFR-01-02符合xDM-F扩展属性格式要求
brand品牌Text50必填赛题要求通过xDM-F自定义字段实现
specification规格型号Text100必填赛题要求通过xDM-F自定义字段实现
location位置Text100必填赛题要求通过xDM-F自定义字段实现
supplier供应商Text100必填赛题要求通过xDM-F自定义字段实现
Part绑定iDME Part实体,启用版本服务
partCode物料编码Text50PK, 必填FR-02-01遵循iDME业务编码生成规则
isResource资源类型Boolean-True/FalseFR-02-04与iDME资源类型字段一致
stockQuantity库存数量Numeric-非负赛题要求通过xDM-F自定义字段实现,支持实例更新接口
stockWarningThreshold库存预警阈值Numeric-非负新增通过xDM-F扩展属性实现
supplier供应商Text100必填赛题要求通过xDM-F自定义字段实现
categoryId分类IDText50关联PartCategory赛题要求绑定iDME树形分类实体ID
version版本Text20格式x.x赛题要求启用iDME版本服务,版本号由iDME维护
PartCategory绑定iDME树形结构实体
id分类IDText50PK, 必填赛题要求遵循iDME树形节点ID生成规则
name分类名称Text100唯一, 必填赛题要求符合iDME分类名称命名规范
parentId父分类IDText50可为空赛题要求绑定iDME树形结构父节点ID
fullPath全路径Text200系统生成树形结构需求由iDME自动生成,支持树形查询

4.2 关系实体设计(完全遵循iDME关系规范)

关系名源实体目标实体扩展属性逻辑说明iDME结合说明
Plan_Procedure_RelWorkingPlanWorkingProceduresequence (Int)定义工序顺序调用iDME关系实体创建接口,扩展属性通过自定义字段实现
Procedure_Resource_RelPlan_Procedure_Rel多态targetType, targetId, quantity关联具体资源支持iDME多态目标实体关联,遵循关系实体参数规范
Part_Category_RelPartPartCategory-物料与分类的多对一关系由iDME树形结构自动维护,无需手动创建
User_Role_RelUserRole-用户与角色的多对多关系调用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错误码+业务错误码”双重映射。

{
  "code": "0000",       // 0000=成功,E00x=系统错误,P00x=业务错误,A00x=权限错误
  "msg": "操作成功",     // 用户可见提示,集成iDME错误描述
  "data": {},           // 业务数据体,与iDME接口返回格式一致
  "requestId": "uuid",  // 日志追踪ID,与iDME requestId对齐
  "timestamp": 1699999999999, // 响应时间戳
  "xdmfErrorCode": ""   // iDME原始错误码(异常时填充)
}

5.2 核心接口列表(均遵循iDME API规范)

API-01: 设备状态实时查询(P0)

  • URL: GET /api/equipments/{equipmentId}/real-time-status

  • iDME依赖接口: GET /rdm_{appID}_app/services/dynamic/api/Equipment/{equipmentId}

  • Response: 与iDME设备实例返回格式一致

API-02: 物料库存校验(P1)

  • URL: POST /api/parts/check-stock

  • iDME依赖接口: GET /rdm_{appID}_app/services/dynamic/api/Part/{partId}

  • Exception Handling: 集成iDME实例查询异常处理

API-03: 工艺提交(P0)

  • URL: POST /api/plans/submit

  • iDME依赖接口:

    1. GET /rdm_{appID}_app/services/dynamic/api/WorkingPlan/{planId}(状态校验)

    2. POST /rdm_{appID}_app/services/dynamic/api/WorkingPlan/update(状态更新)

    3. POST /rdm_{appID}_app/services/rdm/basic/api/LifecycleTemplate/updateLifecycleInfo(生命周期同步)

  • Request: 包含iDME生命周期状态参数

API-04: 角色分配(P1)

  • URL: POST /api/auth/assign-role

  • iDME依赖接口:

    1. POST /rdm_{appID}_app/services/rdm/basic/api/AccessService/batchHasAccess(权限校验)

    2. POST /rdm_{appID}_app/services/dynamic/api/UserRoleRel/create(关系创建)

  • Request: 符合iDME关系实体创建参数规范

API-05: 工艺版本对比(P2)

  • URL: POST /api/plans/compare-versions

  • iDME依赖接口: 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是否正确配置? *

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册