| .. | ||
| WorkCameraExport | ||
| WorkCameraExport.Tests | ||
| README.md | ||
| WorkCameraExport.sln | ||
随工水印相机导出工具 (WorkCameraExport)
Windows 桌面应用程序,用于管理和导出工作现场拍摄的水印照片记录。
功能特性
工作记录管理
- 查询、浏览工作记录(支持按日期、部门、地址、内容、人员等筛选)
- 编辑工作记录信息
- 查看记录关联的照片
数据导出
- 导出工作记录到 Excel(含嵌入图片)
- 按月份下载照片并打包成 ZIP
- ZIP 按目录结构分类:当日照片、参与人员、工作内容、部门
月报表
- 生成月度工作统计报表
- 导出月报表 Excel
其他功能
- 用户登录 / 自动登录
- 网络状态监控
- 图片下载压缩处理
- 历史数据迁移
技术栈
- .NET 8 Windows Forms
- EPPlus(Excel 生成)
- SixLabors.ImageSharp(图片处理)
- 腾讯云 COS SDK(云存储)
项目结构
WorkCameraExport/
├── Forms/ # 窗体界面
│ ├── LoginForm # 登录窗体
│ ├── HomeForm # 主页(统计信息)
│ ├── WorkRecordForm # 工作记录管理
│ ├── MonthReportForm # 月报表
│ ├── MigrationForm # 数据迁移
│ ├── SettingsForm # 设置
│ └── ImageViewerForm # 图片查看器
├── Services/ # 业务服务
│ ├── ApiService # API 调用
│ ├── ExportService # 导出服务
│ ├── ImageService # 图片处理
│ ├── ExcelService # Excel 生成
│ ├── ConfigService # 配置管理
│ ├── LogService # 日志服务
│ └── CosService # 腾讯云 COS
├── Models/ # 数据模型
└── Properties/ # 项目属性
开发环境
- Visual Studio 2022
- .NET 8 SDK
- Windows 10/11
构建与发布
# 构建
dotnet build
# 发布单文件可执行程序
dotnet publish -c Release
配置说明
应用配置文件位于用户目录下,首次运行时自动创建。
主要配置项:
- 服务器地址
- 图片下载并发数
- 图片压缩质量
- 自动清理临时文件
工作记录导出流程
1. 导出全部数据
点击"导出全部" → 构建查询条件 → 分页获取所有数据 → 下载图片 → 生成 Excel
↓
WorkRecordForm.ExportAllAsync()
↓
ExportService.ExportWorkRecordsAsync(query, outputPath, progress)
↓
FetchAllRecordsAsync() // 分页获取数据
↓
循环调用 API: GET /business/CamWorkrecord/list?pageNum=X&pageSize=50&...
↓
DownloadImagesAsync() // 并发下载图片
↓
ExcelService.ExportWorkRecordsToExcelAsync() // 生成 Excel
2. 导出选中数据
勾选记录 → 点击"导出选中" → 逐个获取记录详情 → 下载图片 → 生成 Excel
↓
WorkRecordForm.ExportSelectedAsync(ids)
↓
ExportService.ExportWorkRecordsByIdsAsync(ids, outputPath, progress)
↓
循环调用 API: GET /business/CamWorkrecord/{id} // 获取每条记录详情
↓
DownloadImagesAsync() // 并发下载图片
↓
ExcelService.ExportWorkRecordsToExcelAsync() // 生成 Excel
API 接口汇总
| 接口 | 方法 | 说明 |
|---|---|---|
/business/CamWorkrecord/list |
GET | 分页查询工作记录列表 |
/business/CamWorkrecord/{id} |
GET | 获取单条工作记录详情 |
/business/CamWorkrecord |
POST | 新增工作记录 |
/business/CamWorkrecord |
PUT | 更新工作记录 |
/business/CamWorkrecord/{id} |
DELETE | 删除工作记录 |
/business/CamWorkers/list |
GET | 获取月报表数据 |
/api/workrecord/monthImages |
GET | 获取指定月份的所有图片 |
/api/workrecord/statistics |
GET | 获取统计信息 |
/api/cos/getTempCredentials |
GET | 获取 COS 临时密钥 |
/api/workrecord/migration/list |
GET | 查询待迁移记录 |
/api/workrecord/migration/update |
POST | 更新迁移后的 URL |
查询参数说明
工作记录查询 (/business/CamWorkrecord/list):
pageNum- 页码pageSize- 每页数量startDate- 开始日期endDate- 结束日期deptName- 部门名称address- 地址content- 工作内容workerName- 人员名称statusName- 状态
月报表查询 (/business/CamWorkers/list):
yearMonth- 月份 (YYYY-MM)workerName- 人员名称
月报表功能流程
1. 查询月报表
用户选择月份 → 调用 API 获取数据 → 显示到表格
↓
MonthReportForm.LoadDataAsync()
↓
ApiService.GetMonthlyReportAsync(query)
↓
返回 List<MonthlyReportDto>(月份、部门、人员、工作天数)
2. 导出月报表 Excel
点击"导出 Excel" → 生成文件名 → 调用导出服务 → 保存文件
↓
MonthReportForm.ExportExcelAsync()
↓
ExportService.ExportMonthlyReportAsync(data, outputPath)
↓
ExcelService.ExportMonthlyReportToExcelAsync()
↓
生成 Excel(序号、时间、部门、人员、工作天数)
↓
保存到 PathService.ExportDirectory
3. 下载照片 ZIP
点击"下载照片" → 获取月份图片列表 → 并发下载图片 → 按目录结构保存 → 打包 ZIP
↓
MonthReportForm.DownloadPhotosZipAsync()
↓
ExportService.DownloadPhotosZipAsync(yearMonth, outputPath, progress)
↓
ApiService.GetMonthImagesAsync(yearMonth) // 获取图片列表
↓
ImageService.DownloadImageAsync() // 逐个下载
↓
CreateDirectoryStructure() // 创建目录结构
↓
ZipFile.CreateFromDirectory() // 打包
ZIP 目录结构
workfiles/
└── {yyyyMM}/
└── {yyyyMMdd}/
├── 当日照片/ # 当天所有照片
├── 参与人员/
│ ├── {人员A}/ # 按人员分类
│ └── {人员B}/
├── 工作内容/
│ └── {工作内容}/ # 按工作内容分类
└── 部门/
└── {部门名称}/ # 按部门分类
数据模型
| 模型 | 用途 |
|---|---|
| MonthReportQueryDto | 查询条件(月份、人员名称) |
| MonthlyReportDto | 月报表数据(月份、部门、人员、工作天数) |
| MonthImageDto | 月份图片(记录ID、日期、部门、内容、人员、图片URL列表) |
版本历史
- v2.0.0 - 当前版本