Compare commits

...
Author SHA1 Message Date
my_local_kimi_dev2 8ee74b192b slark WIP snapshot (fence 1791870707279) 2026-10-13 13:51:47 +08:00
3 changed files with 409 additions and 0 deletions
@@ -0,0 +1 @@
{"version":2,"projectId":"layout-b2fffc41-14aa-4de3-b78c-14b3615b3ef2","paneId":"p1","bindingId":"binding-2f85e81e-7984-46ce-ad28-310187aa6722","window":"窗口1","path":"xiaoqu-ops-report-2026-09.html","kind":"html"}
Binary file not shown.

After

Width:  |  Height:  |  Size: 792 KiB

+408
View File
@@ -0,0 +1,408 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>小趣运营报告预览</title>
<link rel="stylesheet" href="/api/worktable/template/dshell.css" />
<style>
.rpt { display: flex; flex-direction: column; gap: 12px; padding: 16px 18px; }
.rpt-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 18px; flex-wrap: wrap; }
.rpt-meta { text-align: right; }
.rpt-cols { display: grid; grid-template-columns: 1.55fr 1fr; gap: 12px; align-items: start; }
@media (max-width: 900px) { .rpt-cols { grid-template-columns: 1fr; } }
.rpt-sec { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
.rpt-kpi .dshell-statValue { font-size: 21px; line-height: 1.25; }
.rpt-kpi .dshell-statLabel { letter-spacing: .2px; }
.rpt-down { color: #f85149 !important; }
.rpt-num { font-variant-numeric: tabular-nums; }
.rpt-chart { display: block; width: 100%; height: auto; margin-top: 2px; }
.rpt-legend { display: flex; gap: 14px; flex-wrap: wrap; }
.rpt-legend span { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--dsw-alias-label-secondary, #9aa4b2); }
.rpt-legend i { width: 12px; height: 3px; border-radius: 2px; display: inline-block; }
.rpt-bar { height: 6px; border-radius: 3px; background: rgba(255,255,255,.07); overflow: hidden; min-width: 64px; }
.rpt-bar > i { display: block; height: 100%; border-radius: 3px; }
.rpt-rank { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; margin-right: 7px; border-radius: 4px; background: rgba(79,142,247,.16); color: #4f8ef7; font-size: 10.5px; font-weight: 600; }
.rpt-tool { display: block; font-size: 10.5px; color: var(--dsw-alias-label-tertiary, #6b7280); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.rpt-err { margin-bottom: 9px; }
.rpt-errHead { display: flex; justify-content: space-between; gap: 10px; font-size: 11.5px; color: var(--dsw-alias-label-secondary, #9aa4b2); margin-bottom: 4px; }
.rpt-errHead code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; color: var(--dsw-alias-label-primary, #e6e8eb); }
.rpt-note { font-size: 11px; color: var(--dsw-alias-label-tertiary, #6b7280); line-height: 1.75; }
.rpt-sum { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 8px 14px; }
</style>
</head>
<body>
<div class="dshell rpt">
<!-- 标题区 -->
<div class="rpt-head">
<div>
<h1 class="dshell-title" style="font-size:19px">小趣运营报告 · 2026 年 9 月</h1>
<p class="dshell-sub">统计周期 2026-09-01 ~ 2026-09-30 · 数据源:小趣MCP(m0/m1/m2 库 + ES paperuselog)</p>
<div style="display:flex;gap:8px;flex-wrap:wrap;margin-top:8px">
<span class="dshell-badge dshell-badgeDone">跑批完成</span>
<span class="dshell-badge">只读工具 32 个</span>
<span class="dshell-badge dshell-badgeWait">演示数据</span>
</div>
</div>
<div class="rpt-meta dshell-muted">
生成时间 2026-10-10 16:12<br />
schema_version v1 · 行级权限:总部视角<br />
生成方式:district.paper.statistics.query 等
</div>
</div>
<!-- KPI -->
<div class="dshell-grid rpt-kpi">
<div class="dshell-stat">
<div class="dshell-statLabel">用纸长度</div>
<div class="dshell-statValue">22.57 万米</div>
<div class="dshell-statDelta">+8.3% 环比</div>
</div>
<div class="dshell-stat">
<div class="dshell-statLabel">使用人次</div>
<div class="dshell-statValue">68.42 万</div>
<div class="dshell-statDelta">+5.1% 环比</div>
</div>
<div class="dshell-stat">
<div class="dshell-statLabel">换纸卷数</div>
<div class="dshell-statValue">2,468 卷</div>
<div class="dshell-statDelta rpt-down">-2.4% 环比</div>
</div>
<div class="dshell-stat">
<div class="dshell-statLabel">台日合计</div>
<div class="dshell-statValue">15,208</div>
<div class="dshell-statDelta">+3.6% 环比</div>
</div>
<div class="dshell-stat">
<div class="dshell-statLabel">单次用纸</div>
<div class="dshell-statValue">0.330 米</div>
<div class="dshell-statDelta rpt-down">-1.2% 环比</div>
</div>
<div class="dshell-stat">
<div class="dshell-statLabel">在用站点 / 设备</div>
<div class="dshell-statValue">386 / 1,126</div>
<div class="dshell-statDelta">+4 个站点 环比</div>
</div>
</div>
<!-- 趋势 -->
<div class="dshell-card">
<div class="rpt-sec">
<h2 class="dshell-sub" style="font-size:13px;color:var(--dsw-alias-label-primary,#e6e8eb)">每日用纸长度走势(单位:米)</h2>
<div class="rpt-legend">
<span><i style="background:#3fb950"></i>9 月日均 7,524</span>
<span><i style="background:#d29922"></i>周末峰值</span>
<span><i style="background:#6b7280"></i>8 月日均 6,947</span>
</div>
</div>
<svg class="rpt-chart" viewBox="0 0 780 224" role="img" aria-label="每日用纸长度走势">
<defs>
<linearGradient id="g1" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#3fb950" stop-opacity=".34" />
<stop offset="100%" stop-color="#3fb950" stop-opacity="0" />
</linearGradient>
</defs>
<line x1="54" y1="196.0" x2="766" y2="196.0" stroke="rgba(255,255,255,.07)" stroke-width="1"/>
<text x="46" y="199.5" fill="#6b7280" font-size="10" text-anchor="end">0</text>
<line x1="54" y1="136.0" x2="766" y2="136.0" stroke="rgba(255,255,255,.07)" stroke-width="1"/>
<text x="46" y="139.5" fill="#6b7280" font-size="10" text-anchor="end">4k</text>
<line x1="54" y1="76.0" x2="766" y2="76.0" stroke="rgba(255,255,255,.07)" stroke-width="1"/>
<text x="46" y="79.5" fill="#6b7280" font-size="10" text-anchor="end">8k</text>
<line x1="54" y1="16.0" x2="766" y2="16.0" stroke="rgba(255,255,255,.07)" stroke-width="1"/>
<text x="46" y="19.5" fill="#6b7280" font-size="10" text-anchor="end">12k</text>
<line x1="54" y1="91.8" x2="766" y2="91.8" stroke="#6b7280" stroke-width="1" stroke-dasharray="4 4" />
<path d="M54.0,99.4 L78.6,96.6 L103.1,93.5 L127.7,90.4 L152.2,75.6 L176.8,62.6 L201.3,98.3 L225.9,93.9 L250.4,89.2 L275.0,93.8 L299.5,89.8 L324.1,75.8 L348.6,63.7 L373.2,92.7 L397.7,89.0 L422.3,95.3 L446.8,89.2 L471.4,88.9 L495.9,63.8 L520.5,66.5 L545.0,92.4 L569.6,91.6 L594.1,85.1 L618.7,78.7 L643.2,81.1 L667.8,51.2 L692.3,57.3 L716.9,85.2 L741.4,87.7 L766.0,76.0 L766.0,196.0 L54.0,196.0 Z" fill="url(#g1)" />
<path d="M54.0,99.4 L78.6,96.6 L103.1,93.5 L127.7,90.4 L152.2,75.6 L176.8,62.6 L201.3,98.3 L225.9,93.9 L250.4,89.2 L275.0,93.8 L299.5,89.8 L324.1,75.8 L348.6,63.7 L373.2,92.7 L397.7,89.0 L422.3,95.3 L446.8,89.2 L471.4,88.9 L495.9,63.8 L520.5,66.5 L545.0,92.4 L569.6,91.6 L594.1,85.1 L618.7,78.7 L643.2,81.1 L667.8,51.2 L692.3,57.3 L716.9,85.2 L741.4,87.7 L766.0,76.0" fill="none" stroke="#3fb950" stroke-width="1.8" stroke-linejoin="round" stroke-linecap="round" />
<circle cx="152.2" cy="75.6" r="2.6" fill="#0b0e14" stroke="#d29922" stroke-width="1.6"/>
<circle cx="176.8" cy="62.6" r="2.6" fill="#0b0e14" stroke="#d29922" stroke-width="1.6"/>
<circle cx="324.1" cy="75.8" r="2.6" fill="#0b0e14" stroke="#d29922" stroke-width="1.6"/>
<circle cx="348.6" cy="63.7" r="2.6" fill="#0b0e14" stroke="#d29922" stroke-width="1.6"/>
<circle cx="495.9" cy="63.8" r="2.6" fill="#0b0e14" stroke="#d29922" stroke-width="1.6"/>
<circle cx="520.5" cy="66.5" r="2.6" fill="#0b0e14" stroke="#d29922" stroke-width="1.6"/>
<circle cx="667.8" cy="51.2" r="2.6" fill="#0b0e14" stroke="#d29922" stroke-width="1.6"/>
<circle cx="692.3" cy="57.3" r="2.6" fill="#0b0e14" stroke="#d29922" stroke-width="1.6"/>
<text x="54.0" y="216" fill="#6b7280" font-size="10" text-anchor="middle">9/1</text>
<text x="176.8" y="216" fill="#6b7280" font-size="10" text-anchor="middle">9/6</text>
<text x="348.6" y="216" fill="#6b7280" font-size="10" text-anchor="middle">9/13</text>
<text x="520.5" y="216" fill="#6b7280" font-size="10" text-anchor="middle">9/20</text>
<text x="692.3" y="216" fill="#6b7280" font-size="10" text-anchor="middle">9/27</text>
<text x="766.0" y="216" fill="#6b7280" font-size="10" text-anchor="middle">9/30</text>
<text x="54" y="12" fill="#6b7280" font-size="10">日均 7,524 · 峰值 9/26 9,655 · 谷值 9/1 6,440</text>
</svg>
</div>
<!-- 两栏 -->
<div class="rpt-cols">
<div>
<div class="dshell-card">
<div class="rpt-sec">
<h2 class="dshell-sub" style="font-size:13px;color:var(--dsw-alias-label-primary,#e6e8eb)">性别维度用纸结构</h2>
<span class="dshell-muted">gender 为 null 的行按口径跳过</span>
</div>
<table class="dshell-table">
<thead>
<tr><th>性别</th><th>用纸长度(米)</th><th>使用人次</th><th>单次(米)</th><th>环比</th><th>占比</th></tr>
</thead>
<tbody>
<tr>
<td>男</td>
<td class="rpt-num">129,563</td>
<td class="rpt-num">364,063</td>
<td class="rpt-num">0.356</td>
<td class="rpt-num" style="color:#3fb950">+9.4%</td>
<td><div class="rpt-bar"><i style="width:57.4%;background:#3fb950"></i></div></td>
</tr>
<tr>
<td>女</td>
<td class="rpt-num">96,157</td>
<td class="rpt-num">320,137</td>
<td class="rpt-num">0.300</td>
<td class="rpt-num" style="color:#3fb950">+6.6%</td>
<td><div class="rpt-bar"><i style="width:42.6%;background:#3fb950"></i></div></td>
</tr>
</tbody>
</table>
</div>
<div class="dshell-card" style="margin-top:12px">
<div class="rpt-sec">
<h2 class="dshell-sub" style="font-size:13px;color:var(--dsw-alias-label-primary,#e6e8eb)">站点用纸 TOP 5</h2>
<span class="dshell-muted">TOP5 合计 78,275 米 · 占全网 34.7%</span>
</div>
<table class="dshell-table">
<thead>
<tr><th>站点</th><th>城市</th><th>用纸长度</th><th>使用人次</th><th>台日</th><th>换纸卷</th><th>环比</th><th>相对量级</th></tr>
</thead>
<tbody>
<tr>
<td><span class="rpt-rank">1</span>环球港购物中心站</td>
<td class="dshell-muted">上海</td>
<td class="rpt-num">21,480</td>
<td class="rpt-num">61,240</td>
<td class="rpt-num">1,206</td>
<td class="rpt-num">214</td>
<td class="rpt-num" style="color:#3fb950">+12.4%</td>
<td><div class="rpt-bar"><i style="width:100.0%;background:#4f8ef7"></i></div></td>
</tr>
<tr>
<td><span class="rpt-rank">2</span>中央车站枢纽站</td>
<td class="dshell-muted">上海</td>
<td class="rpt-num">18,930</td>
<td class="rpt-num">57,860</td>
<td class="rpt-num">1,140</td>
<td class="rpt-num">241</td>
<td class="rpt-num" style="color:#3fb950">+6.1%</td>
<td><div class="rpt-bar"><i style="width:88.1%;background:#4f8ef7"></i></div></td>
</tr>
<tr>
<td><span class="rpt-rank">3</span>滨江公园站</td>
<td class="dshell-muted">杭州</td>
<td class="rpt-num">15,260</td>
<td class="rpt-num">48,930</td>
<td class="rpt-num">1,082</td>
<td class="rpt-num">132</td>
<td class="rpt-num" style="color:#3fb950">+21.7%</td>
<td><div class="rpt-bar"><i style="width:71.0%;background:#4f8ef7"></i></div></td>
</tr>
<tr>
<td><span class="rpt-rank">4</span>市民中心广场站</td>
<td class="dshell-muted">苏州</td>
<td class="rpt-num">12,845</td>
<td class="rpt-num">39,420</td>
<td class="rpt-num">1,015</td>
<td class="rpt-num">118</td>
<td class="rpt-num" style="color:#f85149">-3.2%</td>
<td><div class="rpt-bar"><i style="width:59.8%;background:#4f8ef7"></i></div></td>
</tr>
<tr>
<td><span class="rpt-rank">5</span>星河湾社区站</td>
<td class="dshell-muted">南京</td>
<td class="rpt-num">9,760</td>
<td class="rpt-num">28,150</td>
<td class="rpt-num">962</td>
<td class="rpt-num">96</td>
<td class="rpt-num" style="color:#3fb950">+1.8%</td>
<td><div class="rpt-bar"><i style="width:45.4%;background:#4f8ef7"></i></div></td>
</tr>
</tbody>
</table>
</div>
<div class="dshell-card" style="margin-top:12px">
<div class="rpt-sec">
<h2 class="dshell-sub" style="font-size:13px;color:var(--dsw-alias-label-primary,#e6e8eb)">分周汇总</h2>
<span class="dshell-muted">环比口径:日均(消除各周天数差异)</span>
</div>
<table class="dshell-table">
<thead>
<tr><th>周次</th><th>用纸长度(米)</th><th>用纸日均</th><th>使用人次</th><th>台日</th><th>日均环比</th><th>量级</th></tr>
</thead>
<tbody>
<tr>
<td>第 1 周 · 9/1–9/6</td>
<td class="rpt-num">43,856</td>
<td class="rpt-num">7,309</td>
<td class="rpt-num">132,935</td>
<td class="rpt-num">2,961</td>
<td class="rpt-num" style="color:inherit">—</td>
<td><div class="rpt-bar"><i style="width:92.0%;background:#3fb950"></i></div></td>
</tr>
<tr>
<td>第 2 周 · 9/7–9/13</td>
<td class="rpt-num">51,174</td>
<td class="rpt-num">7,311</td>
<td class="rpt-num">155,116</td>
<td class="rpt-num">3,451</td>
<td class="rpt-num" style="color:#3fb950">+0.0%</td>
<td><div class="rpt-bar"><i style="width:92.0%;background:#3fb950"></i></div></td>
</tr>
<tr>
<td>第 3 周 · 9/14–9/20</td>
<td class="rpt-num">52,444</td>
<td class="rpt-num">7,492</td>
<td class="rpt-num">158,970</td>
<td class="rpt-num">3,535</td>
<td class="rpt-num" style="color:#3fb950">+2.5%</td>
<td><div class="rpt-bar"><i style="width:94.3%;background:#3fb950"></i></div></td>
</tr>
<tr>
<td>第 4 周 · 9/21–9/27</td>
<td class="rpt-num">55,640</td>
<td class="rpt-num">7,949</td>
<td class="rpt-num">168,655</td>
<td class="rpt-num">3,739</td>
<td class="rpt-num" style="color:#3fb950">+6.1%</td>
<td><div class="rpt-bar"><i style="width:100.0%;background:#3fb950"></i></div></td>
</tr>
<tr>
<td>第 5 周 · 9/28–9/30</td>
<td class="rpt-num">22,606</td>
<td class="rpt-num">7,535</td>
<td class="rpt-num">68,525</td>
<td class="rpt-num">1,522</td>
<td class="rpt-num" style="color:#f85149">-5.2%</td>
<td><div class="rpt-bar"><i style="width:94.8%;background:#3fb950"></i></div></td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div class="dshell-card">
<div class="rpt-sec">
<h2 class="dshell-sub" style="font-size:13px;color:var(--dsw-alias-label-primary,#e6e8eb)">工单与订单待办</h2>
<span class="dshell-muted">共 71 单</span>
</div>
<div class="dshell-list">
<div class="dshell-listItem">
<span class="dshell-listItemTitle">出库待办<span class="rpt-tool">warehouse.todo.list.query</span></span>
<span style="display:flex;align-items:center;gap:10px">
<b class="rpt-num" style="font-size:13px">12</b>
<span class="dshell-badge dshell-badgeWait">待处理</span>
</span>
</div>
<div class="dshell-listItem">
<span class="dshell-listItemTitle">安装单待派<span class="rpt-tool">install.order.list.query</span></span>
<span style="display:flex;align-items:center;gap:10px">
<b class="rpt-num" style="font-size:13px">7</b>
<span class="dshell-badge dshell-badgeWait">待派单</span>
</span>
</div>
<div class="dshell-listItem">
<span class="dshell-listItemTitle">取件单超时<span class="rpt-tool">pickup.order.list.query</span></span>
<span style="display:flex;align-items:center;gap:10px">
<b class="rpt-num" style="font-size:13px">3</b>
<span class="dshell-badge dshell-badgeWait">需跟进</span>
</span>
</div>
<div class="dshell-listItem">
<span class="dshell-listItemTitle">设备报障未闭环<span class="rpt-tool">battery.fault.list.query</span></span>
<span style="display:flex;align-items:center;gap:10px">
<b class="rpt-num" style="font-size:13px">5</b>
<span class="dshell-badge dshell-badgeWait">处理中</span>
</span>
</div>
<div class="dshell-listItem">
<span class="dshell-listItemTitle">入库单已完结<span class="rpt-tool">warehouse.in.list.query</span></span>
<span style="display:flex;align-items:center;gap:10px">
<b class="rpt-num" style="font-size:13px">26</b>
<span class="dshell-badge dshell-badgeDone">已完成</span>
</span>
</div>
<div class="dshell-listItem">
<span class="dshell-listItemTitle">撤机单已完结<span class="rpt-tool">withdraw.order.list.query</span></span>
<span style="display:flex;align-items:center;gap:10px">
<b class="rpt-num" style="font-size:13px">18</b>
<span class="dshell-badge dshell-badgeDone">已完成</span>
</span>
</div>
</div>
</div>
<div class="dshell-card" style="margin-top:12px">
<div class="rpt-sec">
<h2 class="dshell-sub" style="font-size:13px;color:var(--dsw-alias-label-primary,#e6e8eb)">MCP 服务运行时</h2>
<span class="dshell-badge dshell-badgeDone">健康</span>
</div>
<div class="rpt-sum">
<div><div class="dshell-statLabel">工具调用</div><div class="rpt-num" style="font-size:14px">18,642</div></div>
<div><div class="dshell-statLabel">错误率</div><div class="rpt-num" style="font-size:14px">0.42%</div></div>
<div><div class="dshell-statLabel">P95 耗时</div><div class="rpt-num" style="font-size:14px">320 ms</div></div>
<div><div class="dshell-statLabel">P99 耗时</div><div class="rpt-num" style="font-size:14px">780 ms</div></div>
</div>
<div class="dshell-divider"></div>
<div class="dshell-muted" style="margin-bottom:8px">错误码分布(共 74 次)</div>
<div class="rpt-err">
<div class="rpt-errHead"><code>PERMISSION_DENIED</code><span>34 次 · 46%</span></div>
<div class="rpt-bar"><i style="width:100.0%;background:#d29922"></i></div>
</div>
<div class="rpt-err">
<div class="rpt-errHead"><code>NOT_FOUND_OR_FORBIDDEN</code><span>21 次 · 28%</span></div>
<div class="rpt-bar"><i style="width:61.8%;background:#d29922"></i></div>
</div>
<div class="rpt-err">
<div class="rpt-errHead"><code>UPSTREAM_UNAVAILABLE</code><span>14 次 · 19%</span></div>
<div class="rpt-bar"><i style="width:41.2%;background:#d29922"></i></div>
</div>
<div class="rpt-err">
<div class="rpt-errHead"><code>DATA_INTEGRITY_ERROR</code><span>5 次 · 7%</span></div>
<div class="rpt-bar"><i style="width:14.7%;background:#d29922"></i></div>
</div>
<div class="dshell-divider"></div>
<div class="dshell-muted" style="margin-bottom:8px">客户端来源占比</div>
<div class="rpt-err">
<div class="rpt-errHead"><span>mcp-kimi</span><span>61%</span></div>
<div class="rpt-bar"><i style="width:100.0%;background:#4f8ef7"></i></div>
</div>
<div class="rpt-err">
<div class="rpt-errHead"><span>mcp-claude</span><span>27%</span></div>
<div class="rpt-bar"><i style="width:44.3%;background:#4f8ef7"></i></div>
</div>
<div class="rpt-err">
<div class="rpt-errHead"><span>cli</span><span>8%</span></div>
<div class="rpt-bar"><i style="width:13.1%;background:#4f8ef7"></i></div>
</div>
<div class="rpt-err">
<div class="rpt-errHead"><span>unknown</span><span>4%</span></div>
<div class="rpt-bar"><i style="width:6.6%;background:#4f8ef7"></i></div>
</div>
</div>
</div>
</div>
<!-- 口径 -->
<div class="dshell-card">
<div class="dshell-muted" style="margin-bottom:6px">口径与说明</div>
<div class="rpt-note">
1. 用纸长度 = Σpaper_length / 100(米,3 位小数);使用人次仅累计 position_id&gt;0 且 runl_mode=0 的厕位模式行;台日合计为按日去重厕位(p_)与厕墙(t_)数的累加;单次用纸 = 用纸长度 / 使用人次。<br />
2. 换纸卷数 rfidCount 取自 ES:统计区间距今 &lt;90 天走热索引 paperuselog,否则冷索引 paperuselog_all;站点 district_strategy.rfid_use_flag=1 时按 state∈{2 上纸, 4 撤纸} 的 rfid 去重计数(去重上限 10000),否则取 state=2 记录数。<br />
3. 上述指标由小趣MCP 只读工具产出(district.paper.statistics.query、warehouse.todo.list.query、install.order.list.query、pickup.order.list.query、battery.fault.list.query 等),调用审计落 audit_log,Token 与手机号均已脱敏。<br />
4. <b>本页为版式预览稿,数值为演示数据</b>;接入真实库后按同一模板替换即可,字段名与工具返回保持一致。
</div>
</div>
</div>
</body>
</html>