6-16代码优化.md 5.27 KB

6-16 代码优化

本文档说明 2026-06-16 对美国版 Web 管理端 GET /api/app/dashboard/overviewRecent 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 其余字段(taskIddisplayNameprintedByNameprintedAtstatuslabelTypeBadge)不变。

Overview 其它区块(指标卡片、周趋势、分类分布等)不受影响。

labelCode(Label ID)计算规则

POST /api/app/us-app-labeling/previewGET /api/app/reports/print-log-list 共用 Helper:ReportsPrintLogDailyLabelIdHelper.ResolveDailyLabelIdsAsync

  1. 取打印任务 PrintedAt ?? CreationTime 的日期部分 yyyyMMdd
  2. 在同一 locationId、同一自然日内,按 PrintedAt ?? CreationTime 升序、Id 升序对所有任务排序。
  3. i 条任务的 Label ID = {yyyyMMdd}-{i}i 从 1 开始)。
  4. 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 GetOverviewAsyncrecentLabels 查询增加 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 一致)

验证步骤

  1. 登录 Web 管理端,获取 Bearer Token。
  2. 选定门店,确认某自然日已有 N 条 fl_label_print_task(可用 print-log 或 SQL 核对)。
  3. 调用 GET /api/app/dashboard/overviewrecentLabels 中对应任务的 labelCode 应与 print-log 列表中同一 taskId 的 Label ID 一致。
  4. 跨日打印:次日首条应为 {新日期}-1
  5. 多门店:两门店同日各打印 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 注释