8.0 KiB
Requirements Document
Introduction
随工水印相机 2.0 系统升级,主要解决服务器资源瓶颈问题。通过将图片存储迁移到腾讯云 COS、开发 CS 客户端本地导出 Excel,释放服务器带宽和存储压力。
Glossary
- COS: 腾讯云对象存储服务 (Cloud Object Storage)
- Pre-signed_URL: 预签名URL,允许客户端直接上传文件到 COS 而无需暴露密钥
- UniApp_Client: 基于 UniApp 框架的移动端应用
- CS_Client: Windows 桌面客户端 (Client-Server)
- Work_Record: 工作记录,包含拍照时间、位置、工作内容、参与人员和图片等信息
- Image_Migration: 图片迁移,将服务器本地图片迁移到 COS 的过程
- API_Server: 基于 .NET 的后端服务器
COS Configuration
腾讯云 COS 配置信息:
| 配置项 | 值 | 说明 |
|---|---|---|
| AppId | 1308826010 | 腾讯云 AppId |
| Region | ap-shanghai | 存储区域(上海) |
| SecretId | AKIDVyMfzKZdZP8zkNyOdsFuSsBJDB7EScs0 | 访问密钥 ID |
| SecretKey | 89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9 | 访问密钥 Secret |
| BucketName | miaoyu | 存储桶名称 |
| DomainUrl | https://miaoyu-1308826010.cos.ap-shanghai.myqcloud.com | 访问资源域名 |
| MaxSize | 100 | 上传文件大小限制 (MB) |
| DurationSecond | 600 | 签名有效期(秒) |
| Prefixes | file | 路径前缀 |
Requirements
Requirement 1: COS 预签名 URL 生成
User Story: As a UniApp_Client user, I want to get pre-signed URLs for uploading images, so that I can upload images directly to COS without going through the server.
Acceptance Criteria
- WHEN the UniApp_Client requests upload URLs with record time, department name, content, workers list, file extension and image count, THE API_Server SHALL return pre-signed URLs for each image
- THE API_Server SHALL generate URLs for four directory categories: daily photos, workers, content, and department
- WHEN generating pre-signed URLs, THE API_Server SHALL set URL expiration time to 30 minutes
- THE API_Server SHALL generate file names using timestamp and random number format:
{timestamp}_{random}.{ext} - THE API_Server SHALL organize COS paths following the structure:
/workfiles/{yyyyMM}/{yyyyMMdd}/{category}/{subcategory}/{filename}
Requirement 2: COS 直传上传
User Story: As a UniApp_Client user, I want to upload images directly to COS, so that server bandwidth is not consumed during upload.
Acceptance Criteria
- WHEN the UniApp_Client receives pre-signed URLs, THE UniApp_Client SHALL upload images directly to COS using PUT method
- THE UniApp_Client SHALL upload each image to all four directory categories (daily, workers, content, department)
- THE UniApp_Client SHALL support concurrent uploads with maximum 3 parallel requests
- IF an upload fails, THEN THE UniApp_Client SHALL retry up to 3 times before reporting failure
Requirement 3: 工作记录保存 (v3 接口)
User Story: As a UniApp_Client user, I want to save work records with COS image URLs, so that my work records are persisted with the new storage system.
Acceptance Criteria
- WHEN the UniApp_Client submits a work record with COS image URLs, THE API_Server SHALL save the record to database
- THE API_Server SHALL accept imageUrls array containing COS URLs instead of Base64 encoded images
- THE API_Server SHALL validate that all provided image URLs are valid COS URLs
- THE API_Server SHALL return the created record ID and image count on success
- THE API_Server SHALL maintain backward compatibility by keeping v1 and v2 interfaces unchanged
Requirement 4: 工作记录导出查询
User Story: As a CS_Client user, I want to query work records with pagination, so that I can export data to Excel locally.
Acceptance Criteria
- WHEN the CS_Client requests work records with pagination parameters, THE API_Server SHALL return paginated results
- THE API_Server SHALL limit page size to maximum 50 records per request
- THE API_Server SHALL support filtering by date range, department name, worker name, and content
- THE API_Server SHALL return complete record data including all image URLs
- THE API_Server SHALL require authentication for export API access
Requirement 5: CS 客户端登录
User Story: As a CS_Client user, I want to login with my credentials, so that I can access the export functionality.
Acceptance Criteria
- WHEN the user enters server address, username and password, THE CS_Client SHALL authenticate against the API_Server
- WHEN login succeeds, THE CS_Client SHALL store the authentication token locally
- THE CS_Client SHALL support "remember me" functionality to persist login state
- IF login fails, THEN THE CS_Client SHALL display appropriate error message
Requirement 6: CS 客户端数据预览
User Story: As a CS_Client user, I want to preview query results before exporting, so that I can verify the data selection.
Acceptance Criteria
- WHEN the user sets query conditions and clicks preview, THE CS_Client SHALL display total record count and estimated image count
- THE CS_Client SHALL display a preview list showing first N records with basic information
- THE CS_Client SHALL show record number, date, department, content, and image count in preview
Requirement 7: CS 客户端 Excel 导出
User Story: As a CS_Client user, I want to export work records to Excel with embedded images, so that I can have offline access to the data.
Acceptance Criteria
- WHEN the user clicks export, THE CS_Client SHALL fetch all matching records via paginated API calls
- THE CS_Client SHALL download images concurrently with maximum 5 parallel downloads
- THE CS_Client SHALL generate Excel file with columns: 序号, 部门名称, 拍照时间, 经度, 纬度, 位置, 工作内容, 施工人员, 状态, 施工图片, 创建时间, 更新时间
- THE CS_Client SHALL embed images in cells with size 100x60 pixels, compressed to 50% quality
- THE CS_Client SHALL display export progress showing processed records and downloaded images
- THE CS_Client SHALL support canceling export operation
- WHEN export completes, THE CS_Client SHALL open the containing folder automatically
Requirement 8: 历史数据迁移查询
User Story: As a CS_Client user, I want to view records pending migration, so that I can select which records to migrate.
Acceptance Criteria
- WHEN the user opens migration window, THE CS_Client SHALL fetch records with old server URLs
- THE CS_Client SHALL support filtering by date range, department, and migration status
- THE CS_Client SHALL display migration status: unmigrated, migrated, or failed
- THE CS_Client SHALL support selecting individual records or batch selection
Requirement 9: 历史数据迁移执行
User Story: As a CS_Client user, I want to migrate selected records to COS, so that historical data uses the new storage system.
Acceptance Criteria
- WHEN the user selects records and clicks migrate, THE CS_Client SHALL download images from old server
- THE CS_Client SHALL upload downloaded images to COS maintaining directory structure
- THE CS_Client SHALL call API to update image URLs in database after successful upload
- THE CS_Client SHALL display migration progress showing processed records and uploaded images
- THE CS_Client SHALL support canceling migration operation
- IF migration fails for a record, THEN THE CS_Client SHALL mark it as failed and continue with next record
- THE CS_Client SHALL support retrying failed migrations
Requirement 10: 迁移 API 支持
User Story: As a CS_Client, I want API endpoints for migration operations, so that I can query and update migration data.
Acceptance Criteria
- WHEN the CS_Client requests migration list, THE API_Server SHALL return records with old server URLs
- THE API_Server SHALL support filtering by migration status (0-unmigrated, 1-migrated, 2-failed)
- WHEN the CS_Client submits URL updates, THE API_Server SHALL update image URLs in database
- THE API_Server SHALL validate that new URLs are valid COS URLs before updating