Files
anxinyan/server-api/app/controller/admin/WarehouseWorkbenchController.php
2026-05-16 16:32:56 +08:00

219 lines
8.3 KiB
PHP

<?php
namespace app\controller\admin;
use app\support\AppraisalEvidenceService;
use app\support\FulfillmentFlowService;
use support\Request;
class WarehouseWorkbenchController
{
public function inboundLookup(Request $request)
{
try {
return api_success($this->service()->lookupInboundByInboundNo($this->inboundNo($request)));
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('入库匹配失败', 500, ['detail' => $e->getMessage()]);
}
}
public function inboundReceive(Request $request)
{
try {
return api_success($this->service()->receiveInbound(
$this->inboundNo($request),
(string)$request->input('internal_tag_no', ''),
$request,
$request->input('inbound_attachments', [])
), '入库完成');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('入库失败', 500, ['detail' => $e->getMessage()]);
}
}
public function uploadInboundEvidenceFile(Request $request)
{
$evidenceService = new AppraisalEvidenceService();
try {
$asset = $evidenceService->upload($request);
if (!in_array((string)($asset['file_type'] ?? ''), ['image', 'video'], true)) {
$evidenceService->delete((string)($asset['file_url'] ?? ''));
return api_error('拆包附件仅支持上传图片或视频', 422);
}
return api_success($asset);
} catch (\Throwable $e) {
return api_error($e->getMessage(), 422);
}
}
public function uploadReturnPackingFile(Request $request)
{
$evidenceService = new AppraisalEvidenceService();
try {
$asset = $evidenceService->upload($request);
if (!in_array((string)($asset['file_type'] ?? ''), ['image', 'video'], true)) {
$evidenceService->delete((string)($asset['file_url'] ?? ''));
return api_error('打包装箱附件仅支持上传图片或视频', 422);
}
return api_success($asset);
} catch (\Throwable $e) {
return api_error($e->getMessage(), 422);
}
}
public function zhongjianLookup(Request $request)
{
try {
return api_success($this->service()->lookupZhongjianTransfer((string)$request->input('internal_tag_no', '')));
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('中检流转查询失败', 500, ['detail' => $e->getMessage()]);
}
}
public function zhongjianOutbound(Request $request)
{
try {
return api_success($this->service()->zhongjianOutbound((string)$request->input('internal_tag_no', ''), $request), '送检出库完成');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('送检出库失败', 500, ['detail' => $e->getMessage()]);
}
}
public function zhongjianInbound(Request $request)
{
try {
return api_success($this->service()->zhongjianInbound((string)$request->input('internal_tag_no', ''), $request), '送检入库完成');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('送检入库失败', 500, ['detail' => $e->getMessage()]);
}
}
public function returnLookup(Request $request)
{
try {
return api_success($this->service()->lookupReturn((string)$request->input('internal_tag_no', ''), $request));
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('寄回查询失败', 500, ['detail' => $e->getMessage()]);
}
}
public function verifyReturnMaterialTag(Request $request)
{
try {
return api_success($this->service()->verifyReturnMaterialTag(
(string)$request->input('internal_tag_no', ''),
(string)$request->input('qr_input', ''),
$request
), '验真吊牌匹配通过,请核对报告');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('验真吊牌确认失败', 500, ['detail' => $e->getMessage()]);
}
}
public function confirmZhongjianReturn(Request $request)
{
try {
return api_success($this->service()->confirmZhongjianReturn((string)$request->input('internal_tag_no', ''), $request), '中检报告已确认');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('中检报告确认失败', 500, ['detail' => $e->getMessage()]);
}
}
public function confirmReturnReport(Request $request)
{
try {
return api_success($this->service()->confirmReturnReport(
(string)$request->input('internal_tag_no', ''),
(int)$request->input('report_id', 0),
$request
), '报告已确认,可填写回寄运单');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('报告确认失败', 500, ['detail' => $e->getMessage()]);
}
}
public function shipReturn(Request $request)
{
try {
return api_success($this->service()->shipReturn(
(string)$request->input('internal_tag_no', ''),
(string)$request->input('express_company', ''),
(string)$request->input('tracking_no', ''),
$request,
$request->input('packing_attachments', [])
), '回寄运单已登记');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
} catch (\Throwable $e) {
return api_error('回寄运单登记失败', 500, ['detail' => $e->getMessage()]);
}
}
private function service(): FulfillmentFlowService
{
return new FulfillmentFlowService();
}
private function inboundNo(Request $request): string
{
$inboundNo = $this->requestString($request, 'inbound_no');
if ($inboundNo !== '') {
return $inboundNo;
}
return $this->requestString($request, 'tracking_no');
}
private function requestString(Request $request, string $key): string
{
foreach ([$request->get($key, null), $request->post($key, null), $request->input($key, null)] as $value) {
$text = trim((string)($value ?? ''));
if ($text !== '') {
return $text;
}
}
return '';
}
}