feat: route material tag scans to reports
This commit is contained in:
@@ -922,11 +922,61 @@ class MaterialTagService
|
||||
return $this->buildMaterialTagH5Url($token, $baseUrl);
|
||||
}
|
||||
|
||||
public function buildMaterialTagScanEntryUrl(string $token): string
|
||||
{
|
||||
$baseUrl = $this->normalizeH5BaseUrl($this->getSystemConfigValue('h5', 'page_base_url'));
|
||||
if ($baseUrl === '') {
|
||||
throw new \RuntimeException('H5 页面根地址未配置');
|
||||
}
|
||||
|
||||
$reportNo = $this->findPublishedReportNoByToken($token);
|
||||
if ($reportNo !== '') {
|
||||
return $this->buildReportDetailH5Url($reportNo, $baseUrl, $token);
|
||||
}
|
||||
|
||||
return $this->buildMaterialTagH5Url($token, $baseUrl);
|
||||
}
|
||||
|
||||
private function buildMaterialTagH5Url(string $token, string $baseUrl): string
|
||||
{
|
||||
return rtrim($baseUrl, '/') . '/#/pages/material-tag/detail?token=' . rawurlencode($token);
|
||||
}
|
||||
|
||||
private function buildReportDetailH5Url(string $reportNo, string $baseUrl, string $token = ''): string
|
||||
{
|
||||
$params = ['report_no' => $reportNo];
|
||||
if ($token !== '') {
|
||||
$params['material_tag_token'] = $token;
|
||||
}
|
||||
|
||||
return rtrim($baseUrl, '/') . '/#/pages/report/detail?' . http_build_query($params, '', '&', PHP_QUERY_RFC3986);
|
||||
}
|
||||
|
||||
private function findPublishedReportNoByToken(string $token): string
|
||||
{
|
||||
$tag = Db::name('material_tag_codes')->where('qr_token', $token)->find();
|
||||
if (
|
||||
!$tag
|
||||
|| (int)($tag['report_id'] ?? 0) <= 0
|
||||
|| ($tag['bind_status'] ?? '') !== 'bound'
|
||||
|| ($tag['status'] ?? 'active') === 'invalid'
|
||||
) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$batch = Db::name('material_batches')->where('id', (int)$tag['batch_id'])->find();
|
||||
if ($batch && ($batch['status'] ?? 'active') === 'invalid') {
|
||||
return '';
|
||||
}
|
||||
|
||||
$report = Db::name('reports')
|
||||
->where('id', (int)$tag['report_id'])
|
||||
->where('report_status', 'published')
|
||||
->find();
|
||||
|
||||
return $report ? (string)$report['report_no'] : '';
|
||||
}
|
||||
|
||||
private function generateUniqueBatchNo(): string
|
||||
{
|
||||
for ($i = 0; $i < 20; $i++) {
|
||||
|
||||
Reference in New Issue
Block a user