需求文档
This commit is contained in:
parent
e3882d7366
commit
f011301873
562
docs/2.0.0/需求文档.md
Normal file
562
docs/2.0.0/需求文档.md
Normal file
|
|
@ -0,0 +1,562 @@
|
||||||
|
# 随工水印相机 2.0 需求文档
|
||||||
|
|
||||||
|
## 项目背景
|
||||||
|
|
||||||
|
当前系统存在以下问题:
|
||||||
|
- 服务器配置较低(2H4G 6M带宽),无法支撑大量图片上传和下载
|
||||||
|
- 图片存储在服务器本地,占用服务器磁盘和带宽资源
|
||||||
|
- Excel 导出功能在服务器端执行,大量图片嵌入时会占用大量内存和带宽
|
||||||
|
|
||||||
|
## 优化目标
|
||||||
|
|
||||||
|
1. 将图片存储迁移到腾讯云 COS,释放服务器带宽和存储压力
|
||||||
|
2. 开发 CS 客户端,将 Excel 导出功能移至客户端本地执行
|
||||||
|
3. 保持现有的目录分类结构,方便用户直接在 COS 打包下载
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 模块一:图片上传改造
|
||||||
|
|
||||||
|
### 1.1 功能描述
|
||||||
|
|
||||||
|
将图片上传方式从"上传到服务器"改为"客户端直传腾讯云 COS"。
|
||||||
|
|
||||||
|
### 1.2 业务流程
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────┐ 1.请求上传签名 ┌─────────┐
|
||||||
|
│ 前端 │ ──────────────────▶ │ 服务器 │
|
||||||
|
│ UniApp │ ◀────────────────── │ .NET │
|
||||||
|
└─────────┘ 2.返回预签名URL └─────────┘
|
||||||
|
│
|
||||||
|
│ 3.直接上传图片(PUT)
|
||||||
|
▼
|
||||||
|
┌─────────┐
|
||||||
|
│ 腾讯云 │
|
||||||
|
│ COS │
|
||||||
|
└─────────┘
|
||||||
|
│
|
||||||
|
│ 4.上传成功,前端回调服务器保存记录
|
||||||
|
▼
|
||||||
|
┌─────────┐
|
||||||
|
│ 服务器 │
|
||||||
|
└─────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.3 COS 目录结构
|
||||||
|
|
||||||
|
保持现有分类结构,便于用户直接打包下载:
|
||||||
|
|
||||||
|
```
|
||||||
|
/workfiles/{yyyyMM}/{yyyyMMdd}/
|
||||||
|
├── 当日照片/{图片文件名}.jpg
|
||||||
|
├── 参与人员/{人员姓名}/{图片文件名}.jpg
|
||||||
|
├── 工作内容/{工作内容}/{图片文件名}.jpg
|
||||||
|
└── 部门/{部门名称}/{图片文件名}.jpg
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.4 接口设计
|
||||||
|
|
||||||
|
#### 1.4.1 获取上传预签名 URL
|
||||||
|
|
||||||
|
**请求:**
|
||||||
|
```
|
||||||
|
POST /api/cos/getUploadUrls
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"recordTime": "2025-01-05 10:30:00",
|
||||||
|
"deptName": "工程部",
|
||||||
|
"content": "日常巡检",
|
||||||
|
"workers": ["张三", "李四"],
|
||||||
|
"fileExt": ".jpg",
|
||||||
|
"imageCount": 3
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"imageId": "uuid-1",
|
||||||
|
"fileName": "1736051400_1234.jpg",
|
||||||
|
"uploadUrls": {
|
||||||
|
"daily": "https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/当日照片/1736051400_1234.jpg?sign=xxx",
|
||||||
|
"workers": {
|
||||||
|
"张三": "https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/参与人员/张三/1736051400_1234.jpg?sign=xxx",
|
||||||
|
"李四": "https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/参与人员/李四/1736051400_1234.jpg?sign=xxx"
|
||||||
|
},
|
||||||
|
"content": "https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/工作内容/日常巡检/1736051400_1234.jpg?sign=xxx",
|
||||||
|
"dept": "https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/部门/工程部/1736051400_1234.jpg?sign=xxx"
|
||||||
|
},
|
||||||
|
"accessUrl": "https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/当日照片/1736051400_1234.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 1.4.2 保存工作记录(v3 新接口)
|
||||||
|
|
||||||
|
> ⚠️ **重要说明**:原有 `/addworkrecord` (v1) 和 `/addworkrecordv2` (v2) 接口保持不变,不做任何修改。新增 v3 接口用于 COS 直传场景。
|
||||||
|
|
||||||
|
**请求:**
|
||||||
|
```
|
||||||
|
POST /addworkrecordv3
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"deptName": "工程部",
|
||||||
|
"recordTime": "2025-01-05 10:30:00",
|
||||||
|
"longitude": "116.397470",
|
||||||
|
"latitude": "39.908823",
|
||||||
|
"address": "北京市东城区xxx",
|
||||||
|
"content": "日常巡检",
|
||||||
|
"statusName": "进行中",
|
||||||
|
"remarks": "",
|
||||||
|
"workers": ["张三", "李四"],
|
||||||
|
"imageUrls": [
|
||||||
|
"https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/当日照片/1736051400_1234.jpg",
|
||||||
|
"https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/当日照片/1736051400_5678.jpg"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**与 v2 接口的区别:**
|
||||||
|
| 字段 | v2 接口 | v3 接口 |
|
||||||
|
|------|---------|---------|
|
||||||
|
| Image | Base64 字符串 | 无 |
|
||||||
|
| Images | Base64 字符串数组 | 无 |
|
||||||
|
| imageUrls | 无 | COS URL 数组 |
|
||||||
|
|
||||||
|
**响应:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"id": 123,
|
||||||
|
"imageCount": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.5 前端改造要点
|
||||||
|
|
||||||
|
1. 拍照加水印后,先调用接口获取预签名 URL
|
||||||
|
2. 使用 `uni.uploadFile` 或 `fetch PUT` 直接上传到 COS
|
||||||
|
3. 同一张图片需要上传到多个目录(当日照片、参与人员、工作内容、部门)
|
||||||
|
4. 全部上传成功后,调用保存接口记录数据
|
||||||
|
|
||||||
|
### 1.6 后端改造要点
|
||||||
|
|
||||||
|
1. 新增腾讯云 COS SDK 依赖
|
||||||
|
2. 配置 COS 密钥(SecretId、SecretKey、Bucket、Region)
|
||||||
|
3. 实现预签名 URL 生成逻辑
|
||||||
|
4. **新增 v3 接口**(`/addworkrecordv3`),接收 COS URL 而非 Base64
|
||||||
|
5. **保留 v1、v2 接口不变**,确保已发布版本兼容性
|
||||||
|
6. v3 接口复用现有的数据库存储逻辑,仅修改图片处理部分
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 模块二:数据导出 API
|
||||||
|
|
||||||
|
### 2.1 功能描述
|
||||||
|
|
||||||
|
提供分页查询接口,供 CS 客户端调用获取工作记录数据。
|
||||||
|
|
||||||
|
### 2.2 接口设计
|
||||||
|
|
||||||
|
#### 2.2.1 分页查询工作记录
|
||||||
|
|
||||||
|
**请求:**
|
||||||
|
```
|
||||||
|
GET /api/workrecord/export/list
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| pageNum | int | 是 | 页码,从 1 开始 |
|
||||||
|
| pageSize | int | 是 | 每页条数,最大 50 |
|
||||||
|
| startDate | string | 否 | 开始日期 yyyy-MM-dd |
|
||||||
|
| endDate | string | 否 | 结束日期 yyyy-MM-dd |
|
||||||
|
| deptName | string | 否 | 部门名称 |
|
||||||
|
| workerName | string | 否 | 人员姓名 |
|
||||||
|
| content | string | 否 | 工作内容(模糊匹配) |
|
||||||
|
|
||||||
|
**响应:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"total": 1000,
|
||||||
|
"pageNum": 1,
|
||||||
|
"pageSize": 50,
|
||||||
|
"pages": 20,
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"deptName": "工程部",
|
||||||
|
"recordTime": "2025-01-05 10:30:00",
|
||||||
|
"longitude": "116.397470",
|
||||||
|
"latitude": "39.908823",
|
||||||
|
"address": "北京市东城区xxx",
|
||||||
|
"content": "日常巡检",
|
||||||
|
"statusName": "进行中",
|
||||||
|
"workers": ["张三", "李四"],
|
||||||
|
"images": [
|
||||||
|
"https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/当日照片/1736051400_1234.jpg",
|
||||||
|
"https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/当日照片/1736051400_5678.jpg"
|
||||||
|
],
|
||||||
|
"createTime": "2025-01-05 10:35:00",
|
||||||
|
"updateTime": "2025-01-05 10:35:00"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.3 注意事项
|
||||||
|
|
||||||
|
- 单页最大 50 条,防止一次性拉取过多数据
|
||||||
|
- 接口需要登录认证
|
||||||
|
- 客户端每次请求间隔 100ms,避免频繁请求
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 模块三:CS 客户端(Excel 导出工具)
|
||||||
|
|
||||||
|
### 3.1 功能描述
|
||||||
|
|
||||||
|
开发一个 Windows 桌面客户端,用于导出带图片的 Excel 文件。
|
||||||
|
|
||||||
|
### 3.2 技术选型
|
||||||
|
|
||||||
|
- 框架:WinForms + .NET 8
|
||||||
|
- 发布方式:AOT 单文件发布,双击即可运行,无需安装
|
||||||
|
- Excel 库:MiniExcel 或 EPPlus
|
||||||
|
|
||||||
|
### 3.3 功能模块
|
||||||
|
|
||||||
|
#### 3.3.1 登录模块
|
||||||
|
|
||||||
|
- 输入服务器地址、用户名、密码
|
||||||
|
- 登录成功后保存 token
|
||||||
|
- 支持记住登录状态
|
||||||
|
|
||||||
|
#### 3.3.2 查询条件模块
|
||||||
|
|
||||||
|
- 日期范围选择(开始日期、结束日期)
|
||||||
|
- 部门筛选(下拉选择)
|
||||||
|
- 人员筛选(输入框)
|
||||||
|
- 工作内容筛选(输入框)
|
||||||
|
|
||||||
|
#### 3.3.3 数据预览模块
|
||||||
|
|
||||||
|
- 显示符合条件的记录总数
|
||||||
|
- 列表预览前 N 条数据
|
||||||
|
- 显示预计导出图片数量
|
||||||
|
|
||||||
|
#### 3.3.4 导出模块
|
||||||
|
|
||||||
|
- 选择保存路径
|
||||||
|
- 显示导出进度(已处理 X/Y 条,已下载 X/Y 张图片)
|
||||||
|
- 支持取消导出
|
||||||
|
- 导出完成后自动打开文件夹
|
||||||
|
|
||||||
|
### 3.4 导出流程
|
||||||
|
|
||||||
|
```
|
||||||
|
1. 用户设置查询条件,点击"开始导出"
|
||||||
|
2. 分页调用 API 获取数据(每页 50 条)
|
||||||
|
3. 解析每条记录的图片 URL
|
||||||
|
4. 并发下载图片到本地临时目录(控制并发数,如 5 个)
|
||||||
|
5. 全部数据获取完成后,生成 Excel 文件
|
||||||
|
6. 将图片嵌入 Excel 对应单元格
|
||||||
|
7. 保存 Excel 文件
|
||||||
|
8. 清理临时文件
|
||||||
|
9. 提示导出完成
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.5 Excel 格式
|
||||||
|
|
||||||
|
> ⚠️ **重要说明**:导出的 Excel 格式必须与现有服务端导出保持一致。
|
||||||
|
|
||||||
|
**Excel 列定义(与现有格式一致):**
|
||||||
|
|
||||||
|
| 列号 | 列名 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| A | 序号 | 自增序号 |
|
||||||
|
| B | 部门名称 | |
|
||||||
|
| C | 拍照时间 | 格式:yyyy-MM-dd HH:mm:ss |
|
||||||
|
| D | 经度 | |
|
||||||
|
| E | 纬度 | |
|
||||||
|
| F | 位置 | 地址信息 |
|
||||||
|
| G | 工作内容 | |
|
||||||
|
| H | 施工人员 | 多人用逗号分隔 |
|
||||||
|
| I | 状态 | |
|
||||||
|
| J | 施工图片 | 嵌入图片,多图水平排列 |
|
||||||
|
| K | 创建时间 | 格式:yyyy-MM-dd HH:mm:ss |
|
||||||
|
| L | 更新时间 | 格式:yyyy-MM-dd HH:mm:ss |
|
||||||
|
|
||||||
|
**图片处理规则:**
|
||||||
|
- 图片嵌入到单元格内
|
||||||
|
- 多张图片水平排列,间距 5 像素
|
||||||
|
- 单张图片尺寸:宽 100 像素,高 60 像素
|
||||||
|
- 图片压缩质量:50%
|
||||||
|
- 行高:60 像素(与图片高度一致)
|
||||||
|
|
||||||
|
**示例效果:**
|
||||||
|
```
|
||||||
|
┌────┬────────┬─────────────────────┬───────────┬──────────┬────────────┬──────────┬──────────┬────────┬─────────────────────┬─────────────────────┬─────────────────────┐
|
||||||
|
│序号│部门名称│拍照时间 │经度 │纬度 │位置 │工作内容 │施工人员 │状态 │施工图片 │创建时间 │更新时间 │
|
||||||
|
├────┼────────┼─────────────────────┼───────────┼──────────┼────────────┼──────────┼──────────┼────────┼─────────────────────┼─────────────────────┼─────────────────────┤
|
||||||
|
│ 1 │工程部 │2025-01-05 10:30:00 │116.397470 │39.908823 │北京市xxx │日常巡检 │张三,李四 │进行中 │[图1][图2][图3] │2025-01-05 10:35:00 │2025-01-05 10:35:00 │
|
||||||
|
│ 2 │工程部 │2025-01-05 11:00:00 │116.397470 │39.908823 │北京市xxx │设备维护 │王五 │已完成 │[图1][图2] │2025-01-05 11:05:00 │2025-01-05 11:05:00 │
|
||||||
|
└────┴────────┴─────────────────────┴───────────┴──────────┴────────────┴──────────┴──────────┴────────┴─────────────────────┴─────────────────────┴─────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**技术实现:**
|
||||||
|
- 使用 EPPlus 库生成 Excel(与服务端一致)
|
||||||
|
- 使用 SixLabors.ImageSharp 处理图片压缩
|
||||||
|
|
||||||
|
### 3.6 界面草图
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────┐
|
||||||
|
│ 随工水印相机 - Excel 导出工具 [—][□][×] │
|
||||||
|
├─────────────────────────────────────────────────────────┤
|
||||||
|
│ 服务器: [https://xxx.com ] 用户名: [admin] [登录] │
|
||||||
|
├─────────────────────────────────────────────────────────┤
|
||||||
|
│ ┌─ 查询条件 ─────────────────────────────────────────┐ │
|
||||||
|
│ │ 日期范围: [2025-01-01] 至 [2025-01-31] │ │
|
||||||
|
│ │ 部门: [全部 ▼] 人员: [ ] │ │
|
||||||
|
│ │ 工作内容: [ ] │ │
|
||||||
|
│ │ [查询预览] │ │
|
||||||
|
│ └────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ 查询结果: 共 256 条记录,约 512 张图片 │
|
||||||
|
│ │
|
||||||
|
│ ┌────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ 序号 │ 日期 │ 部门 │ 工作内容 │ 图片数 │ │ │
|
||||||
|
│ │ 1 │ 2025-01-05 │ 工程部 │ 日常巡检 │ 3 │ │ │
|
||||||
|
│ │ 2 │ 2025-01-05 │ 工程部 │ 设备维护 │ 2 │ │ │
|
||||||
|
│ │ ... │ │ │ │ │ │ │
|
||||||
|
│ └────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ 保存路径: [C:\Users\xxx\Desktop\导出.xlsx] [浏览...] │
|
||||||
|
│ │
|
||||||
|
│ ┌────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ ████████████████████░░░░░░░░░░░░░░░░░░░░ 45% │ │
|
||||||
|
│ │ 正在下载图片: 230/512 │ │
|
||||||
|
│ └────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ [取消] [开始导出] │
|
||||||
|
└─────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 模块四:历史数据迁移
|
||||||
|
|
||||||
|
### 4.1 功能描述
|
||||||
|
|
||||||
|
在 CS 客户端中集成历史数据迁移功能,将服务器本地的图片迁移到腾讯云 COS。
|
||||||
|
|
||||||
|
### 4.2 迁移方案
|
||||||
|
|
||||||
|
在 CS 客户端中新增"历史数据迁移"功能模块,通过可视化界面操作迁移。
|
||||||
|
|
||||||
|
### 4.3 功能设计
|
||||||
|
|
||||||
|
#### 4.3.1 入口
|
||||||
|
|
||||||
|
- 在客户端主界面增加"历史数据迁移"按钮
|
||||||
|
- 点击后弹出迁移窗口
|
||||||
|
|
||||||
|
#### 4.3.2 迁移窗口功能
|
||||||
|
|
||||||
|
1. **数据列表展示**
|
||||||
|
- 调用 API 获取所有未迁移的记录(ImageUrl 包含旧域名的记录)
|
||||||
|
- 列表显示:序号、日期、部门、工作内容、图片数量、迁移状态
|
||||||
|
- 支持分页加载
|
||||||
|
|
||||||
|
2. **筛选条件**
|
||||||
|
- 日期范围
|
||||||
|
- 部门
|
||||||
|
- 迁移状态(未迁移/已迁移/迁移失败)
|
||||||
|
|
||||||
|
3. **选择操作**
|
||||||
|
- 全选/取消全选
|
||||||
|
- 单条勾选
|
||||||
|
- 按页全选
|
||||||
|
|
||||||
|
4. **迁移操作**
|
||||||
|
- 点击"开始迁移"按钮
|
||||||
|
- 显示迁移进度(已处理 X/Y 条,已上传 X/Y 张图片)
|
||||||
|
- 支持取消迁移
|
||||||
|
- 迁移完成后刷新列表状态
|
||||||
|
|
||||||
|
### 4.4 迁移流程
|
||||||
|
|
||||||
|
```
|
||||||
|
1. 客户端调用 API 获取待迁移记录列表
|
||||||
|
2. 用户选择要迁移的记录(或全选)
|
||||||
|
3. 点击"开始迁移"
|
||||||
|
4. 对于每条记录:
|
||||||
|
a. 下载原图片到本地临时目录
|
||||||
|
b. 上传图片到 COS(保持目录结构)
|
||||||
|
c. 调用 API 更新数据库中的 ImageUrl
|
||||||
|
d. 更新迁移状态
|
||||||
|
5. 迁移完成,显示结果统计
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.5 后端 API 支持
|
||||||
|
|
||||||
|
#### 4.5.1 获取待迁移记录列表
|
||||||
|
|
||||||
|
**请求:**
|
||||||
|
```
|
||||||
|
GET /api/workrecord/migration/list
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| pageNum | int | 是 | 页码 |
|
||||||
|
| pageSize | int | 是 | 每页条数,最大 50 |
|
||||||
|
| startDate | string | 否 | 开始日期 |
|
||||||
|
| endDate | string | 否 | 结束日期 |
|
||||||
|
| status | int | 否 | 0-未迁移 1-已迁移 2-失败 |
|
||||||
|
|
||||||
|
**响应:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"total": 500,
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"recordTime": "2025-01-05 10:30:00",
|
||||||
|
"deptName": "工程部",
|
||||||
|
"content": "日常巡检",
|
||||||
|
"imageCount": 3,
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"id": 101,
|
||||||
|
"imageUrl": "https://camera.api.suigongxj.top/workfiles/202501/20250105/当日照片/xxx.jpg"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"migrationStatus": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.5.2 更新迁移后的 URL
|
||||||
|
|
||||||
|
**请求:**
|
||||||
|
```
|
||||||
|
POST /api/workrecord/migration/update
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"recordId": 1,
|
||||||
|
"imageUrls": [
|
||||||
|
{
|
||||||
|
"oldUrl": "https://camera.api.suigongxj.top/workfiles/xxx.jpg",
|
||||||
|
"newUrl": "https://xxx.cos.ap-xxx.myqcloud.com/workfiles/xxx.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.6 界面草图
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ 历史数据迁移 [×] │
|
||||||
|
├─────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ ┌─ 筛选条件 ─────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ 日期范围: [2024-01-01] 至 [2025-01-05] │ │
|
||||||
|
│ │ 部门: [全部 ▼] 状态: [未迁移 ▼] [查询] │ │
|
||||||
|
│ └────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ 共 500 条待迁移记录,约 1200 张图片 │
|
||||||
|
│ │
|
||||||
|
│ [☑] 全选当页 │
|
||||||
|
│ ┌────┬────┬────────────┬────────┬──────────┬────────┬────────────┐ │
|
||||||
|
│ │ ☑ │序号│ 日期 │ 部门 │ 工作内容 │ 图片数 │ 状态 │ │
|
||||||
|
│ ├────┼────┼────────────┼────────┼──────────┼────────┼────────────┤ │
|
||||||
|
│ │ ☑ │ 1 │ 2025-01-05 │ 工程部 │ 日常巡检 │ 3 │ 未迁移 │ │
|
||||||
|
│ │ ☑ │ 2 │ 2025-01-05 │ 工程部 │ 设备维护 │ 2 │ 未迁移 │ │
|
||||||
|
│ │ ☐ │ 3 │ 2025-01-04 │ 技术部 │ 系统检查 │ 5 │ 已迁移 │ │
|
||||||
|
│ │ ☑ │ 4 │ 2025-01-04 │ 工程部 │ 管道维修 │ 4 │ 迁移失败 │ │
|
||||||
|
│ │ ...│ │ │ │ │ │ │ │
|
||||||
|
│ └────┴────┴────────────┴────────┴──────────┴────────┴────────────┘ │
|
||||||
|
│ [上一页] 1/10 [下一页] │
|
||||||
|
│ │
|
||||||
|
│ ┌────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ ████████████████████░░░░░░░░░░░░░░░░░░░░ 45% │ │
|
||||||
|
│ │ 正在迁移: 225/500 条,已上传图片: 540/1200 张 │ │
|
||||||
|
│ └────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ 已选择 450 条记录 [取消迁移] [开始迁移] │
|
||||||
|
└─────────────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.7 注意事项
|
||||||
|
|
||||||
|
- 迁移过程中客户端需要有 COS 上传权限(通过 API 获取临时密钥)
|
||||||
|
- 支持断点续传,迁移失败的记录可以重新选择迁移
|
||||||
|
- 迁移完成后原图片仍保留在服务器,需要手动清理
|
||||||
|
- 建议在业务低峰期执行大批量迁移
|
||||||
|
- 客户端需要处理网络异常,支持重试机制
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 非功能需求
|
||||||
|
|
||||||
|
### 安全性
|
||||||
|
|
||||||
|
- COS 预签名 URL 有效期设置为 30 分钟
|
||||||
|
- 导出 API 需要登录认证
|
||||||
|
- COS Bucket 设置为私有读写
|
||||||
|
|
||||||
|
### 性能
|
||||||
|
|
||||||
|
- 前端上传支持并发(建议 3 个并发)
|
||||||
|
- 客户端下载图片支持并发(建议 5 个并发)
|
||||||
|
- API 分页查询单页最大 50 条
|
||||||
|
- 客户端请求间隔 100ms
|
||||||
|
|
||||||
|
### 兼容性
|
||||||
|
|
||||||
|
- CS 客户端支持 Windows 10/11
|
||||||
|
- 前端兼容现有 UniApp 多端(H5、App、小程序)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 开发计划
|
||||||
|
|
||||||
|
| 阶段 | 内容 | 预计工时 |
|
||||||
|
|------|------|----------|
|
||||||
|
| 第一阶段 | 后端 COS 集成 + 上传接口改造 | 2 天 |
|
||||||
|
| 第二阶段 | 前端上传逻辑改造 | 2 天 |
|
||||||
|
| 第三阶段 | 导出 API 开发 | 1 天 |
|
||||||
|
| 第四阶段 | CS 客户端开发 | 3 天 |
|
||||||
|
| 第五阶段 | 历史数据迁移 | 1 天 |
|
||||||
|
| 第六阶段 | 测试 + 上线 | 1 天 |
|
||||||
|
|
||||||
|
**总计:约 10 个工作日**
|
||||||
Loading…
Reference in New Issue
Block a user