master
cody 11 months ago
parent 53fba72e85
commit 725c3b817a

@ -186,16 +186,16 @@ class GateController extends Controller
* path="/api/admin/gate/visits/update",
* tags={"门岗端接口"},
* summary="更新拜访信息",
* description="门岗端更新拜访信息绑定ID卡、修改状态、上传货车图片等",
* description="门岗端更新拜访信息(按字段进行更新:绑定ID卡、修改进/离厂状态、上传货车图片等)",
* @OA\RequestBody(
* required=true,
* @OA\JsonContent(
* @OA\Property(property="id", type="integer", description="拜访ID"),
* @OA\Property(property="action", type="string", description="操作类型bind_card绑定ID卡enter进厂leave离厂upload_vehicle上传货车图片"),
* @OA\Property(property="person_no", type="string", description="人牌号绑定ID卡时必填"),
* @OA\Property(property="car_no", type="string", description="停车牌号绑定ID卡时必填"),
* @OA\Property(property="vehicle_images", type="array", description="货车图片ID数组上传货车图片时必填", @OA\Items(type="integer")),
* @OA\Property(property="remark", type="string", description="备注信息")
* @OA\Property(property="person_no", type="string", description="人牌号(提供则更新并记录绑定日志)"),
* @OA\Property(property="car_no", type="string", description="停车牌号(提供则更新"),
* @OA\Property(property="audit_status", type="integer", enum={3,4}, description="审核状态3进厂(需当前为已通过)4离厂(需当前为已进厂)"),
* @OA\Property(property="vehicle_images", type="array", description="货车图片ID数组仅物流车辆可提供需为有效上传ID", @OA\Items(type="integer")),
* @OA\Property(property="remark", type="string", description="备注信息(用于进/离厂日志可选附加)")
* )
* ),
* @OA\Response(
@ -223,94 +223,82 @@ class GateController extends Controller
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.visit_not_found')]);
}
$action = $request->input('action');
$remark = $request->input('remark', '');
$personNo = $request->input('person_no');
$carNo = $request->input('car_no');
$vehicleImages = $request->input('vehicle_images'); // null 表示未尝试更新
$newAuditStatus = $request->input('audit_status'); // 可选3进厂4离厂
DB::beginTransaction();
switch ($action) {
case 'bind_card':
// 绑定ID卡
$personNo = $request->input('person_no');
$carNo = $request->input('car_no');
if (!$personNo) {
return $this->fail([ResponseCode::ERROR_PARAMETER, __('gate.person_no_required')]);
}
$hasAnyChange = false;
// 绑定/更新人牌、车牌
if (!is_null($personNo) || !is_null($carNo)) {
if (!is_null($personNo)) {
$visit->person_no = $personNo;
if ($carNo) {
$visit->car_no = $carNo;
}
$visit->save();
// 记录日志
$this->createVisitLog($visit, VisitLog::TYPE_ENTER, __('gate.bind_card_log', ['person_no' => $personNo, 'car_no' => $carNo ?: '']));
break;
}
if (!is_null($carNo)) {
$visit->car_no = $carNo;
}
$visit->save();
$hasAnyChange = true;
$this->createVisitLog(
$visit,
VisitLog::TYPE_ENTER,
__('gate.bind_card_log', [
'person_no' => $visit->person_no ?: '',
'car_no' => $visit->car_no ?: ''
])
);
}
case 'enter':
// 进厂
// 审核状态变更:支持进厂(Approved -> Entered) 与 离厂(Entered -> Left)
if (!is_null($newAuditStatus)) {
if ((int) $newAuditStatus === Visit::AUDIT_STATUS_ENTERED) {
if ($visit->audit_status != Visit::AUDIT_STATUS_APPROVED) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.only_approved_visits_can_enter')]);
}
$visit->audit_status = Visit::AUDIT_STATUS_ENTERED;
$visit->save();
$hasAnyChange = true;
// 记录日志
$this->createVisitLog($visit, VisitLog::TYPE_ENTER, __('gate.enter_log') . ($remark ? '' . $remark : ''));
// 记录门岗日志
$this->createGateLog($visit, 'enter', $remark);
break;
case 'leave':
// 离厂
} elseif ((int) $newAuditStatus === Visit::AUDIT_STATUS_LEFT) {
if ($visit->audit_status != Visit::AUDIT_STATUS_ENTERED) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.only_entered_visitors_can_leave')]);
}
$visit->audit_status = Visit::AUDIT_STATUS_LEFT;
$visit->save();
$hasAnyChange = true;
// 记录日志
$this->createVisitLog($visit, VisitLog::TYPE_LEAVE, __('gate.leave_log') . ($remark ? '' . $remark : ''));
// 记录门岗日志
$this->createGateLog($visit, 'leave', $remark);
}
}
break;
case 'upload_vehicle':
// 上传货车图片
if ($visit->type != Visit::TYPE_LOGISTICS_CAR) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.only_logistics_cars_can_upload_images')]);
}
$vehicleImages = $request->input('vehicle_images', []);
if (empty($vehicleImages)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.vehicle_images_required')]);
}
// 验证图片ID是否存在于uploads表中
$existingImages = Upload::whereIn('id', $vehicleImages)->pluck('id')->toArray();
if (count($existingImages) !== count($vehicleImages)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.invalid_vehicle_images')]);
}
// 货车图片更新(仅物流车辆)
if (!is_null($vehicleImages)) {
if ($visit->type != Visit::TYPE_LOGISTICS_CAR) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.only_logistics_cars_can_upload_images')]);
}
// 存储货车图片ID数组到vehicle_images字段
$visit->vehicle_images = $vehicleImages;
$visit->save();
if (!is_array($vehicleImages) || empty($vehicleImages)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.vehicle_images_required')]);
}
// 记录日志
$this->createVisitLog($visit, VisitLog::TYPE_ENTER, __('gate.upload_vehicle_images_log', ['count' => count($vehicleImages)]));
$visit->vehicle_images = $vehicleImages;
$visit->save();
$hasAnyChange = true;
break;
$this->createVisitLog($visit, VisitLog::TYPE_ENTER, __('gate.upload_vehicle_images_log', ['count' => count($vehicleImages)]));
}
default:
return $this->fail([ResponseCode::ERROR_BUSINESS, __('gate.invalid_action_type')]);
if (!$hasAnyChange) {
DB::rollBack();
return $this->fail([ResponseCode::ERROR_PARAMETER, __('gate.invalid_action_type')]);
}
DB::commit();

Loading…
Cancel
Save