7103851e31dc266d6c03b656610dd289f76a7e09
\345\215\225\346\234\272\347\211\210.md
| ... | ... | @@ -0,0 +1,97 @@ |
| 1 | +## IIDP 平台应用市场功能技术文档 |
|
| 2 | + |
|
| 3 | +### 概述 |
|
| 4 | + |
|
| 5 | +本文档详细描述了 IIDP 平台应用市场的相关功能,包括应用的上传、上架、安装、更新、卸载和删除的具体流程和技术实现。以下内容基于单机版平台的功能实现。 |
|
| 6 | + |
|
| 7 | +### 1. 应用上传 |
|
| 8 | + |
|
| 9 | +#### 功能描述 |
|
| 10 | +上传应用的 JAR 包到 `meta_attachment` 中,对于重复的文件也会当作新的文件处理。优化建议:可以实现一键秒传功能,即如果文件的 MD5 值相同则无需重复上传。 |
|
| 11 | + |
|
| 12 | +#### 实现细节 |
|
| 13 | +1. **方法签名**: |
|
| 14 | + ```java |
|
| 15 | + public String putObject(InputStream inputStream, String fileType, String originalFilename, String bucketName) |
|
| 16 | + ``` |
|
| 17 | +2. **上传流程**: |
|
| 18 | + - 最终调用 `base_file` 中的 `upload` 方法。 |
|
| 19 | + - 在 `meta_attachment` 中新增一条记录。 |
|
| 20 | + - 点击保存后,调用 `create` 方法,在应用市场创建一条记录,并设置 `app_market` 为 `noUp`。 |
|
| 21 | + |
|
| 22 | +### 2. 应用上架 |
|
| 23 | + |
|
| 24 | +#### 功能描述 |
|
| 25 | +计算依赖图,检查依赖的应用是否在应用市场中,修改应用状态为 `up`。此过程相当于一次干运行(dry run)。 |
|
| 26 | + |
|
| 27 | +#### 实现细节 |
|
| 28 | +1. **依赖检查**:确保所有依赖的应用均在应用市场中。 |
|
| 29 | +2. **状态修改**:将应用状态设置为 `up`。 |
|
| 30 | + |
|
| 31 | +### 3. 应用安装 |
|
| 32 | + |
|
| 33 | +#### 功能描述 |
|
| 34 | +应用必须先上架后才能安装。安装过程中会获取依赖的应用,初始化策略注册菜单的权限策略,加载应用的配置信息和系统变量,并将状态修改为 `installed`。 |
|
| 35 | + |
|
| 36 | +#### 实现细节 |
|
| 37 | +1. **安装方法**: |
|
| 38 | + - `installApps` |
|
| 39 | + - 获取依赖的应用,调用 `buildAppDataInfo` 方法。 |
|
| 40 | + - 调用 `doInstallApps` 方法。 |
|
| 41 | + - 调用 `postInstall` 方法。 |
|
| 42 | + - 加载种子数据 `loadSeedData`。 |
|
| 43 | +2. **状态修改**:将应用状态设置为 `installed`。 |
|
| 44 | + |
|
| 45 | +### 4. 应用卸载 |
|
| 46 | + |
|
| 47 | +#### 功能描述 |
|
| 48 | +除了卸载选中的当前应用,还需要卸载其所依赖的应用。修改数据状态为 `uninstalled`,软删除应用的其他资源状态(如菜单、视图等),清理内存中的相关信息。 |
|
| 49 | + |
|
| 50 | +#### 实现细节 |
|
| 51 | +1. **状态修改**:将应用状态设置为 `uninstalled`。 |
|
| 52 | +2. **资源清理**: |
|
| 53 | + - 移除内存信息。 |
|
| 54 | + - 清理 `appContainer` 中的 `metas`、`models`。 |
|
| 55 | + - 清理 `appDataInfoMap`、`appContainerMap`。 |
|
| 56 | + - 移除类加载器。 |
|
| 57 | + - 清理 `appContainerMap` 中的 `finalModelMap`。 |
|
| 58 | + - 移除自定义系统变量。 |
|
| 59 | +3. **重新安装**:安装需要重装的应用(按安装流程)。 |
|
| 60 | + |
|
| 61 | +### 5. 应用更新 |
|
| 62 | + |
|
| 63 | +#### 功能描述 |
|
| 64 | +对比应用市场的 MD5 值和已安装的 MD5 值(前提是应用已上架),如果不相等则激活更新。注意:仅在有新版本时提示更新,而不是仅基于 MD5 不相等。 |
|
| 65 | + |
|
| 66 | +#### 实现细节 |
|
| 67 | +1. **MD5 比对**:如果上架的应用版本低于已安装版本,也会提示更新,这是需要优化的点。 |
|
| 68 | +2. **更新流程**: |
|
| 69 | + - 点击更新后,比对 MD5 不一致,则下载新的 JAR 包到 `apps/modules` 目录下。 |
|
| 70 | + |
|
| 71 | +### 6. 应用删除 |
|
| 72 | + |
|
| 73 | +#### 功能描述 |
|
| 74 | +已经安装过的应用不能删除。否则将直接删除 `MetaAppStore` 中的记录。 |
|
| 75 | + |
|
| 76 | +#### 实现细节 |
|
| 77 | +1. **删除限制**:已安装的应用不可删除。 |
|
| 78 | +2. **记录删除**:直接删除 `MetaAppStore` 中的记录。 |
|
| 79 | + |
|
| 80 | +### 7. 安装逻辑详细描述 (`doInstallApps`) |
|
| 81 | + |
|
| 82 | +#### 步骤描述 |
|
| 83 | +1. **清空应用信息**:清空 `app` 信息,元模型信息,移除类加载器等操作。 |
|
| 84 | +2. **重置类加载器**:通过最新的 JAR 文件设置类加载器,检测循环依赖和配置错误,计算应用安装顺序(基础应用在最前面)。 |
|
| 85 | +3. **加载初始态元模型**: |
|
| 86 | + - `OriginalMeta`:直接通过 `convert` 转换而来的元模型信息,没有继承扩展。 |
|
| 87 | + - `appDataInfoMap`:保存的是 `app.json` 信息。 |
|
| 88 | + - `appContainerMap`:保存的是元模型相关信息。 |
|
| 89 | + - `appGroupContainer`:多个应用组成一个组的 `map`。 |
|
| 90 | +4. **二次构建**: |
|
| 91 | + - 仅处理 `ModelMeta`,即 `model` 元模型,并处理继承扩展(仅解析)。 |
|
| 92 | +5. **最终构建**: |
|
| 93 | + - 处理继承扩展的场景,并构建父信息。 |
|
| 94 | + |
|
| 95 | +### 总结 |
|
| 96 | + |
|
| 97 | +以上是 IIDP 平台应用市场功能的详细技术文档。本文档涵盖了应用上传、上架、安装、更新、卸载和删除的具体实现细节和流程。通过对各功能模块的详细描述,能够帮助开发者更好地理解和使用 IIDP 平台的应用市场功能。 |
|
| ... | ... | \ No newline at end of file |