Files
anxinyan/server-api/app/controller/admin/MaterialsController.php
2026-05-15 14:01:36 +08:00

136 lines
4.4 KiB
PHP

<?php
namespace app\controller\admin;
use app\support\MaterialTagService;
use support\Request;
class MaterialsController
{
public function batches(Request $request)
{
return api_success([
'list' => $this->service()->listBatches([
'keyword' => $request->input('keyword', ''),
'qr_url' => $request->input('qr_url', ''),
'verify_code' => $request->input('verify_code', ''),
'date_start' => $request->input('date_start', ''),
'date_end' => $request->input('date_end', ''),
]),
]);
}
public function detail(Request $request)
{
$id = (int)$request->input('id', 0);
if ($id <= 0) {
return api_error('物料批次 ID 不能为空', 422);
}
try {
return api_success($this->service()->detail($id, trim((string)$request->input('keyword', ''))));
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 404);
}
}
public function create(Request $request)
{
$count = (int)$request->input('count', 0);
$remark = trim((string)$request->input('remark', ''));
$adminId = (int)$request->header('x-admin-id', 0);
$adminName = trim((string)$request->header('x-admin-name', ''));
try {
return api_success($this->service()->createBatch($count, $remark, $adminId, $adminName), '物料批次已生成');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\Throwable $e) {
return api_error('物料批次生成失败', 500, ['detail' => $e->getMessage()]);
}
}
public function download(Request $request)
{
$file = $this->resolveDownloadFile($request);
if ($file instanceof \support\Response) {
return $file;
}
return redirect($file['url'], 302);
}
public function downloadLink(Request $request)
{
$file = $this->resolveDownloadFile($request);
if ($file instanceof \support\Response) {
return $file;
}
return api_success([
'filename' => $file['filename'],
'url' => $file['url'],
'size' => $file['size'],
], '下载链接已生成');
}
private function resolveDownloadFile(Request $request): array|\support\Response
{
$id = (int)$request->input('id', 0);
if ($id <= 0) {
return api_error('物料批次 ID 不能为空', 422);
}
try {
$file = $this->service()->downloadBatch($id, $request);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 500);
} catch (\Throwable $e) {
return api_error('物料批次下载失败', 500, ['detail' => $e->getMessage()]);
}
return $file;
}
public function invalidateBatch(Request $request)
{
$id = (int)$request->input('id', 0);
if ($id <= 0) {
return api_error('物料批次 ID 不能为空', 422);
}
try {
return api_success($this->service()->invalidateBatch($id, $request), '物料批次已失效');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 500);
} catch (\Throwable $e) {
return api_error('物料批次失效失败', 500, ['detail' => $e->getMessage()]);
}
}
public function invalidateTag(Request $request)
{
$id = (int)$request->input('id', 0);
if ($id <= 0) {
return api_error('物料条码 ID 不能为空', 422);
}
try {
return api_success($this->service()->invalidateTag($id, $request), '物料条码已失效');
} catch (\InvalidArgumentException $e) {
return api_error($e->getMessage(), 422);
} catch (\RuntimeException $e) {
return api_error($e->getMessage(), $e->getCode() ?: 500);
} catch (\Throwable $e) {
return api_error('物料条码失效失败', 500, ['detail' => $e->getMessage()]);
}
}
private function service(): MaterialTagService
{
return new MaterialTagService();
}
}