|
|
# 货车图片上传功能实现总结
|
|
|
|
|
|
## 实现内容
|
|
|
|
|
|
根据要求,已在拜访预约表(visits表)中增加了json字段来存储货车图片,并完善了相关的上传逻辑。
|
|
|
|
|
|
## 数据库变更
|
|
|
|
|
|
### 1. 新增字段
|
|
|
- **字段名**: `vehicle_images`
|
|
|
- **类型**: `json`
|
|
|
- **说明**: 存储货车图片的uploads表id数组
|
|
|
- **迁移文件**: `2025_09_09_112040_add_vehicle_images_to_visits_table.php`
|
|
|
|
|
|
### 2. 字段设计
|
|
|
```sql
|
|
|
ALTER TABLE visits ADD COLUMN vehicle_images JSON NULL COMMENT '货车图片id数组';
|
|
|
```
|
|
|
|
|
|
## 模型更新
|
|
|
|
|
|
### Visit模型更新
|
|
|
1. **类型转换**: 在`$casts`中添加了`'vehicle_images' => 'array'`
|
|
|
2. **关联关系**: 添加了`getVehicleImagesAttribute()`方法
|
|
|
|
|
|
```php
|
|
|
// 类型转换
|
|
|
protected $casts = [
|
|
|
'vehicle_images' => 'array',
|
|
|
// ... 其他字段
|
|
|
];
|
|
|
|
|
|
// 获取货车图片列表(多文件)
|
|
|
public function getVehicleImagesAttribute()
|
|
|
{
|
|
|
if (!$this->vehicle_images) {
|
|
|
return [];
|
|
|
}
|
|
|
return Upload::whereIn('id', $this->vehicle_images)->get();
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## 控制器更新
|
|
|
|
|
|
### GateController更新
|
|
|
1. **添加Upload模型引用**
|
|
|
2. **完善upload_vehicle操作逻辑**
|
|
|
3. **更新Swagger文档**
|
|
|
|
|
|
```php
|
|
|
case 'upload_vehicle':
|
|
|
// 上传货车图片
|
|
|
if ($visit->type != Visit::TYPE_LOGISTICS_CAR) {
|
|
|
return $this->error(__('gate.only_logistics_cars_can_upload_images'));
|
|
|
}
|
|
|
|
|
|
$vehicleImages = $request->input('vehicle_images', []);
|
|
|
if (empty($vehicleImages)) {
|
|
|
return $this->error(__('gate.vehicle_images_required'));
|
|
|
}
|
|
|
|
|
|
// 验证图片ID是否存在于uploads表中
|
|
|
$existingImages = Upload::whereIn('id', $vehicleImages)->pluck('id')->toArray();
|
|
|
if (count($existingImages) !== count($vehicleImages)) {
|
|
|
return $this->error(__('gate.invalid_vehicle_images'));
|
|
|
}
|
|
|
|
|
|
// 存储货车图片ID数组到vehicle_images字段
|
|
|
$visit->vehicle_images = $vehicleImages;
|
|
|
$visit->save();
|
|
|
|
|
|
// 记录日志
|
|
|
$this->createVisitLog($visit, VisitLog::TYPE_ENTER, __('gate.upload_vehicle_images_log', ['count' => count($vehicleImages)]));
|
|
|
|
|
|
break;
|
|
|
```
|
|
|
|
|
|
## API接口
|
|
|
|
|
|
### 上传货车图片接口
|
|
|
- **路径**: `POST /api/gate/visits/{id}/update`
|
|
|
- **参数**:
|
|
|
```json
|
|
|
{
|
|
|
"action": "upload_vehicle",
|
|
|
"vehicle_images": [123, 456, 789]
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### Swagger文档更新
|
|
|
```php
|
|
|
@OA\Property(property="vehicle_images", type="array", description="货车图片ID数组(上传货车图片时必填)", @OA\Items(type="integer"))
|
|
|
```
|
|
|
|
|
|
## 多语言支持
|
|
|
|
|
|
### 中文翻译 (lang/zh-CN/gate.php)
|
|
|
```php
|
|
|
'invalid_vehicle_images' => '货车图片ID无效',
|
|
|
```
|
|
|
|
|
|
### 英文翻译 (lang/en/gate.php)
|
|
|
```php
|
|
|
'invalid_vehicle_images' => 'Invalid vehicle image IDs',
|
|
|
```
|
|
|
|
|
|
## 使用方式
|
|
|
|
|
|
### 1. 上传货车图片
|
|
|
```php
|
|
|
// 通过API上传
|
|
|
POST /api/gate/visits/123/update
|
|
|
{
|
|
|
"action": "upload_vehicle",
|
|
|
"vehicle_images": [123, 456, 789]
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### 2. 获取货车图片
|
|
|
```php
|
|
|
// 获取拜访记录及货车图片
|
|
|
$visit = Visit::with('acceptAdminSign')->find(123);
|
|
|
$vehicleImages = $visit->vehicle_images; // 返回Upload模型集合
|
|
|
```
|
|
|
|
|
|
### 3. API返回数据格式
|
|
|
```json
|
|
|
{
|
|
|
"id": 123,
|
|
|
"name": "访客姓名",
|
|
|
"type": 3,
|
|
|
"vehicle_images": [
|
|
|
{
|
|
|
"id": 123,
|
|
|
"original_name": "vehicle1.jpg",
|
|
|
"url": "http://domain.com/uploads/vehicle1.jpg"
|
|
|
},
|
|
|
{
|
|
|
"id": 456,
|
|
|
"original_name": "vehicle2.jpg",
|
|
|
"url": "http://domain.com/uploads/vehicle2.jpg"
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## 验证逻辑
|
|
|
|
|
|
1. **类型验证**: 只有物流车辆(type=3)才能上传货车图片
|
|
|
2. **必填验证**: vehicle_images参数不能为空
|
|
|
3. **存在性验证**: 验证所有图片ID是否存在于uploads表中
|
|
|
4. **数据存储**: 将验证通过的图片ID数组存储到vehicle_images字段
|
|
|
|
|
|
## 日志记录
|
|
|
|
|
|
上传货车图片时会自动记录操作日志:
|
|
|
- **日志类型**: VisitLog::TYPE_ENTER
|
|
|
- **日志内容**: "上传货车图片:{图片数量}张"
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
1. **文件存储**: 所有图片都存储在uploads表中,通过id关联
|
|
|
2. **权限控制**: 只有物流车辆类型的拜访才能上传货车图片
|
|
|
3. **数据验证**: 严格验证图片ID的有效性
|
|
|
4. **日志记录**: 所有操作都有完整的日志记录
|
|
|
5. **多语言**: 支持中英双语错误提示
|
|
|
|
|
|
## 测试建议
|
|
|
|
|
|
1. **正常上传**: 测试物流车辆上传多张货车图片
|
|
|
2. **权限验证**: 测试非物流车辆尝试上传图片
|
|
|
3. **数据验证**: 测试无效的图片ID
|
|
|
4. **空值处理**: 测试空的vehicle_images参数
|
|
|
5. **多语言**: 测试中英文错误提示
|
|
|
|
|
|
货车图片上传功能已完整实现,符合所有要求!
|