# 随工水印相机导出工具 (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 ## 构建与发布 ```bash # 构建 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(月份、部门、人员、工作天数) ``` ### 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 - 当前版本