WorkCamera/docs/2.0.1/需求文档.md
2026-01-05 23:58:56 +08:00

25 KiB
Raw Blame History

随工水印相机 2.0.1 需求文档

版本说明

本版本主要针对 CS 客户端进行功能增强,增加主页界面、完善数据管理功能、新增月报表导出功能。

核心原则所有导出功能Excel、ZIP均在客户端本地执行减轻服务器压力。


模块一:客户端主页界面

1.1 功能描述

新增客户端主页界面,展示统计信息和功能入口。

1.2 界面设计

┌─────────────────────────────────────────────────────────────────────┐
│  随工水印相机 - 数据管理工具                              [—][□][×] │
├─────────────────────────────────────────────────────────────────────┤
│  服务器: [https://xxx.com    ] 用户名: [admin] [登录]               │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  ┌─ 统计信息 ─────────────────────────────────────────────────────┐ │
│  │                                                                 │ │
│  │   📊 本月工作记录        📷 本月图片数         👷 本月施工人员   │ │
│  │      256 条                 512 张                 15 人        │ │
│  │                                                                 │ │
│  │   📅 今日新增            💾 数据总量             🔄 待迁移数据   │ │
│  │      12 条                  3,456 条               500 条       │ │
│  │                                                                 │ │
│  └─────────────────────────────────────────────────────────────────┘ │
│                                                                      │
│  ┌─ 功能入口 ─────────────────────────────────────────────────────┐ │
│  │                                                                 │ │
│  │   ┌──────────────┐  ┌──────────────┐  ┌──────────────┐         │ │
│  │   │   📋         │  │   📊         │  │   🔄         │         │ │
│  │   │  工作记录    │  │   月报表     │  │ 历史数据迁移 │         │ │
│  │   │              │  │              │  │              │         │ │
│  │   │ 查看、导出   │  │ 查看、导出   │  │ 迁移到COS    │         │ │
│  │   │ 工作记录数据 │  │ 月度统计报表 │  │              │         │ │
│  │   └──────────────┘  └──────────────┘  └──────────────┘         │ │
│  │                                                                 │ │
│  └─────────────────────────────────────────────────────────────────┘ │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

1.3 统计信息

统计项 说明 数据来源
本月工作记录 当月工作记录总数 API 查询
本月图片数 当月上传图片总数 API 查询
本月施工人员 当月参与施工的人员数 API 查询
今日新增 今日新增记录数 API 查询
数据总量 系统工作记录总数 API 查询
待迁移数据 未迁移到 COS 的记录数 API 查询

1.4 功能按钮

按钮 功能 跳转页面
工作记录 查看、管理、导出工作记录 工作记录管理界面
月报表 查看、导出月度统计报表 月报表界面
历史数据迁移 将旧数据迁移到 COS 数据迁移界面

模块二:工作记录管理界面

2.1 功能描述

完整实现 Web 端工作记录管理的所有功能,包括数据查看、编辑、删除、导出。

2.2 功能对照(参考 CamWorkrecord.vue

Web 功能 客户端实现 说明
查询筛选 实现 拍照时间、部门名称、拍照地址、工作内容、施工人员、状态
数据列表 实现 显示所有字段,支持多图预览
新增记录 实现 弹窗表单,支持多图上传
编辑记录 实现 弹窗表单,支持修改所有字段
删除记录 实现 单条删除,确认提示
查看详情 实现 弹窗查看完整信息
导出全部 实现 按查询条件导出 Excel本地生成
导出所选 实现 多选后导出选中数据(本地生成)
分页 实现 分页加载数据

2.3 数据列表字段

列名 字段 说明
选择框 - 多选框,用于批量操作
主键 id 记录 ID
部门名称 deptName
图片 images 多图显示最多显示3张缩略图超出显示"+N",点击可放大查看
地址信息 - 包含拍照时间、经度、纬度、位置
工作内容 content
施工人员 workers 多人用逗号分隔
状态 statusName 字典值显示
时间信息 - 包含拍照时间、创建时间、修改时间
其它信息 remarks WGS84/GCJ02 坐标信息
操作 - 详情、编辑、删除按钮

2.4 图片功能要求

  1. 缩略图显示

    • 列表中每条记录最多显示 3 张缩略图
    • 超过 3 张显示 "+N" 徽章
    • 显示图片总数
  2. 图片放大查看

    • 点击缩略图可放大查看
    • 支持图片轮播切换
    • 支持缩放、拖拽
  3. 多图上传

    • 新增/编辑时支持上传多张图片
    • 最多支持 15 张图片
    • 单张图片不超过 10MB
    • 支持拖拽上传
    • 支持删除已上传图片

2.5 导出功能(本地执行)

2.5.1 导出流程

1. 用户设置查询条件或选择数据,点击"导出"
2. 客户端分页调用 API 获取数据(每页 50 条)
3. 解析每条记录的图片 URL
4. 并发下载图片到本地临时目录(控制并发数 5 个)
5. 全部数据获取完成后,在本地生成 Excel 文件
6. 将图片嵌入 Excel 对应单元格
7. 保存 Excel 文件到用户指定路径
8. 清理临时文件
9. 提示导出完成,可选择打开文件夹

2.5.2 Excel 格式(与 Web 端一致)

列号 列名 说明
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 像素

2.6 界面草图

┌─────────────────────────────────────────────────────────────────────────────────┐
│  工作记录管理                                                    [返回主页]     │
├─────────────────────────────────────────────────────────────────────────────────┤
│  ┌─ 查询条件 ─────────────────────────────────────────────────────────────────┐ │
│  │ 拍照时间: [2025-01-01] 至 [2025-01-31]                                     │ │
│  │ 部门名称: [          ]  拍照地址: [          ]  工作内容: [          ]      │ │
│  │ 施工人员: [          ]  状态: [全部 ▼]                                     │ │
│  │                                              [查询] [重置]                 │ │
│  └────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                  │
│  [新增] [编辑] [导出] [导出所选]                                                 │
│                                                                                  │
│  ┌────┬────┬────────┬─────────────────┬────────────┬──────────┬────────┬──────┐ │
│  │ ☑  │ ID │ 部门   │ 图片            │ 地址信息   │ 工作内容 │ 状态   │ 操作 │ │
│  ├────┼────┼────────┼─────────────────┼────────────┼──────────┼────────┼──────┤ │
│  │ ☐  │ 1  │ 工程部 │ [📷][📷][📷]+2  │ 北京市xxx  │ 日常巡检 │ 进行中 │ 👁✏🗑│ │
│  │ ☐  │ 2  │ 工程部 │ [📷][📷]        │ 北京市xxx  │ 设备维护 │ 已完成 │ 👁✏🗑│ │
│  │ ☐  │ 3  │ 技术部 │ [📷]            │ 上海市xxx  │ 系统检查 │ 进行中 │ 👁✏🗑│ │
│  └────┴────┴────────┴─────────────────┴────────────┴──────────┴────────┴──────┘ │
│                                                [上一页] 1/10 [下一页]            │
│                                                                                  │
│  ┌────────────────────────────────────────────────────────────────────────────┐ │
│  │ ████████████████████░░░░░░░░░░░░░░░░░░░░  45%                              │ │
│  │ 正在导出: 已处理 45/100 条,已下载图片 120/256 张                           │ │
│  └────────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────┘

2.7 编辑/新增弹窗

┌─────────────────────────────────────────────────────────────────┐
│  编辑工作记录                                            [×]    │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  部门名称: [工程部          ]                                    │
│                                                                  │
│  图片:                                                           │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │  将文件拖到此处,或点击上传                                  ││
│  │  支持上传多张图片最多15张单张不超过10MB                  ││
│  └─────────────────────────────────────────────────────────────┘│
│  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐                   │
│  │ 📷 ❌│ │ 📷 ❌│ │ 📷 ❌│ │ 📷 ❌│ │ 📷 ❌│                   │
│  │  1   │ │  2   │ │  3   │ │  4   │ │  5   │                   │
│  └──────┘ └──────┘ └──────┘ └──────┘ └──────┘                   │
│                                                                  │
│  拍照时间: [2025-01-05 10:30:00    ]                             │
│  经度:     [116.397470             ]                             │
│  纬度:     [39.908823              ]                             │
│  拍照地址: [北京市东城区xxx        ]                             │
│  工作内容: [日常巡检               ]                             │
│  状态:     [进行中 ▼]                                            │
│  施工人员: [张三,李四              ]                             │
│  备注:     [                       ]                             │
│                                                                  │
│                                    [取消]  [提交]                │
└─────────────────────────────────────────────────────────────────┘

模块三:月报表界面

3.1 功能描述

完整实现 Web 端月报表的所有功能(参考 CamWorkers.vue所有导出操作在客户端本地执行。

3.2 功能对照

Web 功能 客户端实现 说明
查询筛选 实现 人员名称、月份
数据列表 实现 时间、部门名称、人员名称、工作天数
导出 Excel 实现 本地生成月报表 Excel
下载照片 ZIP 实现 本地下载并打包照片

3.3 数据列表字段

列名 字段 说明
时间 yearMonth 格式YYYY-MM
部门名称 deptName
人员名称 workerName
工作天数 workDays

3.4 月报表 Excel 导出(本地执行)

3.4.1 导出流程

1. 用户选择月份,点击"导出 Excel"
2. 客户端调用 API 获取月报表数据
3. 在本地生成 Excel 文件
4. 保存到用户指定路径
5. 提示导出完成

3.4.2 Excel 格式

列号 列名 说明
A 序号 自增序号
B 时间 格式YYYY-MM
C 部门名称
D 人员名称
E 工作天数

3.5 照片 ZIP 下载(本地执行)

3.5.1 功能说明

下载指定月份的所有工作照片,按目录结构打包成 ZIP 文件。

3.5.2 下载流程

1. 用户选择月份,点击"下载照片 ZIP"
2. 客户端调用 API 获取该月份所有工作记录及图片 URL
3. 按目录结构下载图片到本地临时目录:
   /workfiles/{yyyyMM}/{yyyyMMdd}/
     ├── 当日照片/{图片文件名}.jpg
     ├── 参与人员/{人员姓名}/{图片文件名}.jpg
     ├── 工作内容/{工作内容}/{图片文件名}.jpg
     └── 部门/{部门名称}/{图片文件名}.jpg
4. 将临时目录打包成 ZIP 文件
5. 保存到用户指定路径
6. 清理临时文件
7. 提示下载完成

3.5.3 目录结构说明

服务器端 COS 存储的目录结构:

/workfiles/{yyyyMM}/{yyyyMMdd}/
  ├── 当日照片/          # 按日期分类的所有照片
  ├── 参与人员/{人员姓名}/  # 按施工人员分类
  ├── 工作内容/{工作内容}/  # 按工作内容分类
  └── 部门/{部门名称}/     # 按部门分类

客户端下载时需要:

  1. 获取该月份所有工作记录
  2. 根据记录中的图片 URL 解析出目录结构
  3. 下载图片并保持相同的目录结构
  4. 打包成 ZIP

3.5.4 进度显示

  • 显示总图片数
  • 显示已下载图片数
  • 显示下载进度百分比
  • 支持取消下载

3.6 界面草图

┌─────────────────────────────────────────────────────────────────────┐
│  月报表                                              [返回主页]     │
├─────────────────────────────────────────────────────────────────────┤
│  ┌─ 查询条件 ─────────────────────────────────────────────────────┐ │
│  │ 人员名称: [          ]  月份: [2025-01 ▼]                      │ │
│  │                                              [查询] [重置]     │ │
│  └────────────────────────────────────────────────────────────────┘ │
│                                                                      │
│  [导出 Excel] [下载照片 ZIP]                                         │
│                                                                      │
│  ┌──────────┬────────────┬────────────┬────────────┐                │
│  │ 时间     │ 部门名称   │ 人员名称   │ 工作天数   │                │
│  ├──────────┼────────────┼────────────┼────────────┤                │
│  │ 2025-01  │ 工程部     │ 张三       │ 22         │                │
│  │ 2025-01  │ 工程部     │ 李四       │ 20         │                │
│  │ 2025-01  │ 技术部     │ 王五       │ 18         │                │
│  │ 2025-01  │ 技术部     │ 赵六       │ 21         │                │
│  └──────────┴────────────┴────────────┴────────────┘                │
│                                                                      │
│  ┌────────────────────────────────────────────────────────────────┐ │
│  │ ████████████████████░░░░░░░░░░░░░░░░░░░░  45%                  │ │
│  │ 正在下载照片: 540/1200 张                                       │ │
│  └────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘

模块四:历史数据迁移界面

此模块功能与 2.0.0 版本保持一致,详见 2.0.0 需求文档。


模块五:通用功能增强

5.1 登录状态保持

  • 支持记住登录状态
  • Token 过期自动刷新
  • 登录失效时提示重新登录

5.2 网络异常处理

  • 网络断开时提示用户
  • 支持断点续传(导出/下载中断后可继续)
  • 请求超时自动重试(最多 3 次)

5.3 导出任务管理

  • 支持后台导出(不阻塞界面操作)
  • 显示导出任务列表
  • 支持取消正在进行的导出任务
  • 导出完成后桌面通知

5.4 设置功能

  • 默认保存路径设置
  • 图片下载并发数设置1-10
  • 图片压缩质量设置30%-100%
  • 自动清理临时文件设置

5.5 日志功能

  • 记录操作日志
  • 记录错误日志
  • 支持导出日志文件(用于问题排查)

后端 API 支持

6.1 新增统计接口

请求:

GET /api/workrecord/statistics

响应:

{
  "code": 200,
  "data": {
    "monthRecordCount": 256,
    "monthImageCount": 512,
    "monthWorkerCount": 15,
    "todayRecordCount": 12,
    "totalRecordCount": 3456,
    "pendingMigrationCount": 500
  }
}

6.2 新增月报表图片列表接口

用于客户端下载 ZIP 时获取图片列表

请求:

GET /api/workrecord/monthImages

请求参数:

参数 类型 必填 说明
yearMonth string 月份,格式 YYYY-MM

响应:

{
  "code": 200,
  "data": {
    "total": 1200,
    "images": [
      {
        "recordId": 1,
        "recordTime": "2025-01-05 10:30:00",
        "deptName": "工程部",
        "content": "日常巡检",
        "workers": ["张三", "李四"],
        "imageUrl": "https://xxx.cos.ap-xxx.myqcloud.com/workfiles/202501/20250105/当日照片/xxx.jpg"
      }
    ]
  }
}

6.3 复用现有接口

功能 接口 说明
工作记录列表 GET /business/CamWorkrecord/list 分页查询
工作记录详情 GET /business/CamWorkrecord/{id} 获取单条记录
新增工作记录 POST /business/CamWorkrecord
修改工作记录 PUT /business/CamWorkrecord
删除工作记录 DELETE /business/CamWorkrecord/{id}
月报表列表 GET /business/CamWorkers/list

技术实现要点

7.1 图片查看器

  • 使用 WinForms PictureBox 或第三方图片查看控件
  • 支持图片缩放(鼠标滚轮)
  • 支持图片拖拽移动
  • 支持多图轮播切换(左右箭头)

7.2 多图上传

  • 支持拖拽文件到上传区域
  • 支持点击选择多个文件
  • 实时显示上传预览
  • 支持删除已选图片

7.3 数据表格

  • 使用 DataGridView 控件
  • 支持多选CheckBox 列)
  • 支持列宽自适应
  • 支持排序

7.4 Excel 生成

  • 使用 EPPlus 库生成 Excel
  • 使用 SixLabors.ImageSharp 处理图片压缩
  • 图片嵌入使用 EPPlus 的 Pictures.Add 方法

7.5 ZIP 打包

  • 使用 System.IO.Compression.ZipFile
  • 保持目录结构
  • 支持大文件分块处理

7.6 并发下载

  • 使用 SemaphoreSlim 控制并发数
  • 使用 HttpClient 下载图片
  • 支持进度回调

开发计划

阶段 内容 预计工时
第一阶段 主页界面 + 统计接口 1 天
第二阶段 工作记录管理界面(列表、查询、分页) 1 天
第三阶段 工作记录管理界面(新增、编辑、删除、图片功能) 2 天
第四阶段 工作记录导出功能(本地 Excel 生成) 1 天
第五阶段 月报表界面 + Excel 导出 1 天
第六阶段 月报表照片 ZIP 下载 1 天
第七阶段 通用功能(设置、日志、异常处理) 1 天
第八阶段 测试 + 优化 1 天

总计:约 9 个工作日