6-16 代码优化
本文档说明 2026-06-16 对美国版 Web 管理端 GET /api/app/dashboard/overview 中 Recent Labels 区块 Label ID 展示规则的同步改造。
测试环境:http://flus-test.3ffoodsafety.com
背景
Dashboard「Recent Labels」列表原先 recentLabels[].labelCode 返回 fl_label.LabelCode(或标签业务编码),与业务要求的 Label ID 含义不一致。
业务规则(与 App preview、Print Log、报表一致):
Label ID = 某门店在某个自然日内,每次打印任务按时间递增的序号
| 示例 | 含义 |
|---|---|
20260513-1 |
该门店 2026-05-13 当日第 1 次打印 |
20260513-2 |
同日第 2 次 |
20260514-1 |
次日重新从 1 计数 |
格式:{yyyyMMdd}-{n}(n 从 1 递增;按 PrintedAt ?? CreationTime 所在自然日、同一 locationId 统计)。
注意:
labelCode字段名保持不变(前端 Recent Labels 已绑定该字段展示 Label ID),语义由「标签编码」改为「门店当日打印序号」。不是fl_label.Id,也不是fl_label.LabelCode。
接口说明
| 项目 | 内容 |
|---|---|
| 方法 | GET |
| 路径 | /api/app/dashboard/overview |
| 鉴权 | Bearer Token(Web 管理端登录 Token) |
| 入参 | 无 |
出参变更(DashboardOverviewOutputDto.recentLabels[])
| 字段 | 变更前 | 变更后 |
|---|---|---|
labelCode |
fl_label.LabelCode(标签业务编码) |
该打印任务在所属门店、打印日内的序号 yyyyMMdd-n |
recentLabels 其余字段(taskId、displayName、printedByName、printedAt、status、labelTypeBadge)不变。
Overview 其它区块(指标卡片、周趋势、分类分布等)不受影响。
labelCode(Label ID)计算规则
与 POST /api/app/us-app-labeling/preview、GET /api/app/reports/print-log-list 共用 Helper:ReportsPrintLogDailyLabelIdHelper.ResolveDailyLabelIdsAsync。
- 取打印任务
PrintedAt ?? CreationTime的日期部分yyyyMMdd。 - 在同一
locationId、同一自然日内,按PrintedAt ?? CreationTime升序、Id升序对所有任务排序。 - 第
i条任务的 Label ID ={yyyyMMdd}-{i}(i从 1 开始)。 - Recent Labels 取权限范围内最新 10 条打印任务;每条任务的
labelCode为其在所属门店当日序列中的序号(非全平台统一编号)。
多门店场景:不同门店各自从 -1 计数;同一 Dashboard 列表可混合展示多个门店的记录,每条记录的 labelCode 仅对应该任务的 locationId + 打印日。
请求示例
curl -X GET "http://flus-test.3ffoodsafety.com/api/app/dashboard/overview" \
-H "Authorization: Bearer {token}"
响应片段(recentLabels 示例)
{
"recentLabels": [
{
"taskId": "1234567890123456789",
"labelCode": "20260604-3",
"displayName": "Organic Milk 1L",
"printedByName": "Alice",
"printedAt": "2026-06-04T14:22:00",
"status": "active",
"labelTypeBadge": "2\"x2\""
},
{
"taskId": "1234567890123456788",
"labelCode": "20260604-2",
"displayName": "Whole Wheat Bread",
"printedByName": "Bob",
"printedAt": "2026-06-04T11:05:00",
"status": "expired",
"labelTypeBadge": "4\"x2\""
}
],
"generatedAt": "2026-06-04T15:00:00"
}
若某任务无法解析门店或打印时间,则 labelCode 为 无。
涉及代码
| 文件 | 说明 |
|---|---|
Services/DashboardAppService.cs |
GetOverviewAsync:recentLabels 查询增加 LocationId,调用 ResolveDailyLabelIdsAsync 填充 labelCode |
Dtos/Dashboard/DashboardRecentLabelItemDto.cs |
LabelCode XML 注释更新为当日序号语义 |
IServices/IDashboardAppService.cs |
接口 remarks 补充 recentLabels[].labelCode 规则说明 |
Helpers/ReportsPrintLogDailyLabelIdHelper.cs |
共用(与 6-11 preview / 6-2 print-log 一致) |
验证步骤
- 登录 Web 管理端,获取 Bearer Token。
- 选定门店,确认某自然日已有 N 条
fl_label_print_task(可用 print-log 或 SQL 核对)。 - 调用
GET /api/app/dashboard/overview,recentLabels中对应任务的labelCode应与 print-log 列表中同一taskId的 Label ID 一致。 - 跨日打印:次日首条应为
{新日期}-1。 - 多门店:两门店同日各打印 1 次,两条记录的
labelCode末尾序号均可为-1(各自门店独立计数)。
SQL 抽查
SELECT Id, LocationId, PrintedAt, CreationTime,
IFNULL(PrintedAt, CreationTime) AS EffectiveTime
FROM fl_label_print_task
WHERE LocationId = '{locationId}'
AND IFNULL(PrintedAt, CreationTime) >= '{yyyy-MM-dd}'
AND IFNULL(PrintedAt, CreationTime) < DATE_ADD('{yyyy-MM-dd}', INTERVAL 1 DAY)
ORDER BY EffectiveTime, Id;
按行号 1..N 对应 labelCode 的 -n 部分;日期部分为 yyyyMMdd。
关联文档
- Label ID 通用规则与 preview:
项目相关文档/6-11代码优化.md - App print-log Label ID:
项目相关文档/6-2代码优化.md - Dashboard 数据范围(管理员 / 门店绑定):
DashboardScopeHelper及接口IDashboardAppService注释