99 lines
3.1 KiB
PHP
99 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace app\controller\admin;
|
|
|
|
use app\support\ExpressCompanyService;
|
|
use support\Request;
|
|
|
|
class ExpressCompaniesController
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$enabledOnly = (int)$request->input('enabled_only', 0) === 1;
|
|
|
|
return api_success([
|
|
'list' => $this->service()->list($enabledOnly),
|
|
'default_company' => $this->service()->defaultName(),
|
|
]);
|
|
}
|
|
|
|
public function catalog(Request $request)
|
|
{
|
|
$keyword = trim((string)$request->input('keyword', ''));
|
|
$limit = max(1, min(100, (int)$request->input('limit', 30)));
|
|
|
|
return api_success([
|
|
'list' => $this->service()->catalogList($keyword, $limit),
|
|
'total' => $this->service()->catalogTotal(),
|
|
'synced_at' => $this->service()->catalogSyncedAt(),
|
|
]);
|
|
}
|
|
|
|
public function syncCatalog(Request $request)
|
|
{
|
|
try {
|
|
$result = $this->service()->syncCatalog();
|
|
} catch (\RuntimeException $e) {
|
|
return api_error($e->getMessage(), 422);
|
|
} catch (\Throwable $e) {
|
|
return api_error('快递100公司码表同步失败', 500, [
|
|
'detail' => $e->getMessage(),
|
|
]);
|
|
}
|
|
|
|
return api_success($result, '快递100公司码表已同步');
|
|
}
|
|
|
|
public function recognize(Request $request)
|
|
{
|
|
$trackingNo = trim((string)$request->input('tracking_no', ''));
|
|
$companyName = trim((string)$request->input('company_name', $request->input('company_code', '')));
|
|
if ($trackingNo === '') {
|
|
return api_error('运单号不能为空', 422);
|
|
}
|
|
|
|
try {
|
|
$result = $this->service()->recognizeCompany($companyName, $trackingNo);
|
|
} catch (\RuntimeException $e) {
|
|
return api_error($e->getMessage(), 422);
|
|
} catch (\Throwable $e) {
|
|
return api_error('快递公司识别失败', 500, [
|
|
'detail' => $e->getMessage(),
|
|
]);
|
|
}
|
|
|
|
return api_success($result);
|
|
}
|
|
|
|
public function save(Request $request)
|
|
{
|
|
$id = (int)$request->input('id', 0);
|
|
|
|
try {
|
|
$companyId = $this->service()->save([
|
|
'company_name' => $request->input('company_name', ''),
|
|
'company_code' => $request->input('company_code', ''),
|
|
'status' => $request->input('status', 'enabled'),
|
|
'is_default' => $request->input('is_default', false),
|
|
'sort_order' => $request->input('sort_order', 0),
|
|
'remark' => $request->input('remark', ''),
|
|
], $id);
|
|
} catch (\RuntimeException $e) {
|
|
return api_error($e->getMessage(), 422);
|
|
} catch (\Throwable $e) {
|
|
return api_error('快递公司保存失败', 500, [
|
|
'detail' => $e->getMessage(),
|
|
]);
|
|
}
|
|
|
|
return api_success([
|
|
'id' => $companyId,
|
|
], $id > 0 ? '快递公司已更新' : '快递公司已创建');
|
|
}
|
|
|
|
private function service(): ExpressCompanyService
|
|
{
|
|
return new ExpressCompanyService();
|
|
}
|
|
}
|