\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