unis_manager/.workbuddy/memory/2026-09-20.md

63 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 2026-09-20
## 修正「本季度验收」统计口径 → 按「验收时间」
用户反馈本季度验收数据不对,要求按「验收时间」统计;并启动服务。
- **启动**:uvicorn 之前已停;重新用 `<PY> -m uvicorn app.main:app --host 127.0.0.1 --port 8770` 启动,`/health` ok。前端 static 无需重启。
- **排查**:`已验收` 共 64 条,全部带「验收时间」`accept_date`(季度文本):**Q1=8 / Q2=35 / Q3=21**。旧统计用 `accept_date_real`(真实日期),而 4 条 Q3 行(id 43 宜章县智慧城市、44 广安武胜智慧停车场、104 陕西-神木能源朱盖塔煤矿二期、120 解放碑地下环道AI智能视频巡检)`accept_date_real` 为空 → 本季度只算出 17,比实际 21 少 4。
- **修正**(`web/app.js` `renderCustomList`,静态文件):验收统计改为按 `accept_date`(Q1~Q4):
- `本季度验收` = `accept_date` == 当前季度(Q3)→ **21**
- `本年验收` = 有「验收时间」的全部(Q1/Q2/Q3)→ **64**
- 不再依赖 `accept_date_real`;新增 `qOf()` 归一化(trim + 大写 + `^Q[1-4]$`)。
- **现值**(2026-09-20,全部 120 个项目):项目数量/合同额 120 / 本季度下单 12 / 本年下单 32 / 本季度验收 21 / 本年验收 64。
- 备注:4 条 Q3 行的 `accept_date_real`(验收日期)仍为空,统计已不受影响;如需可补 2026-09-30。
## 定开项目 5 项新需求(进度 / 提前交付 / 归属筛选 / 下单口径 / 本周进展 tab)
- **进度字段**:`custom_projects.progress`(Float, NOT NULL, 默认 0)复用,编辑/新建表单加「进度(%)」输入(`cdProgress`/`ncProgress`,提交 `progress`);表格加「进度」列,仅当 **状态=交付中** 或 progress>0 时显示 `N%`,否则「—」。
- **项目归属新增「提前交付」**:统一常量 `CUSTOM_ORIGINS = [新签订单, 存量项目, 汇智直签, 提前交付, 其他]`;新建/编辑下拉都用它。
- **项目归属筛选**:工具栏加 `#cOrigin`(state.customOrigin,客户端过滤);导出也带 `origin` 参数(后端 `export_custom` 新增 `origin`)。
- **下单口径**:`CUSTOM_PLACED = [新签订单, 存量项目, 汇智直签]`(`isPlaced()`)。第 1 张统计卡改名「**已下单项目 / 合同额**」,「本季度下单 / 本年下单」也只统计已下单(提前交付不计入下单)。验收仍看 `accept_date`。
- **新增「本周进展」tab**:定开现在两个 tab —— **项目明细 / 本周进展**(`state.customTab`)。`renderCustomWeekly()`:按 `update_date` 落在本周(周一~周日)筛项目,统计 **本周更新项目 / 验收情况 / 下单情况 / 提前交付情况 / 进行中项目情况**(各自数量+金额;进行中=待开发/交付中/交付完成),下面用表格列出本周项目。
- **重构**:抽出 `customTableHtml(view)` 供两个 tab 共用(表格新增「进度」列);`renderCustom` 工具栏按 tab 切换(明细显示搜索/筛选/导出/新建,进展只显示周期)。
- **清理**:删掉 `openCustomDrawer` 里 `baseSec` 的死 edit 分支(重复 id:cdName/cdAmount/cdProgress/cdRemark 等)与不再用的 `stageOpts`。
- 现值(120 个项目,origin 分布:新签订单 83 / 存量项目 27 / 汇智直签 10,暂无提前交付);本周更新 5 个(id 23/43/44/104/120,均 已验收)。
- 后端改了 `export.py` → 重启 uvicorn;`node --check` / `ast.parse` / health / 导出(origin) / PATCH progress 均通过。
### 「本周进展」tab 二次调整(同日稍后)
- 去掉「本周更新项目」汇总卡(不再统计本周更新的数量/金额),只保留 验收 / 下单 / 提前交付 / 进行中 四张。
- 本周项目列表**去掉「操作」列**:`customTableHtml(view, withOps)` 加开关,本周进展传 `false`;改数据靠点项目名称打开详情。
- **「下单情况」改为「本周新增下单」**:按「下单时间」`sign_date` 落在本周统计(`signedWeek`),不再用「本周更新 ∩ 已下单」。其余三类(验收/提前交付/进行中)仍按「更新时间」在本周归属。
- 纯前端改动(`web/app.js`),无需重启;当前 09-14~09-20 本周新增下单 0 个。
### 「本周进展」tab 三次调整(同日再稍后)
- 「下单情况」→ **「本周新增项目」**:统计 本周更新 ∩(**已下单 或 提前交付**)——`isPlaced(p) || p.origin === "提前交付"`。
- **去掉「提前交付情况」卡**(提前交付并入「本周新增项目」,不再单独统计)。
- 「进行中项目情况」→ **「交付中项目」**:只统计 `project_status === "交付中"`(不再含 待开发/交付完成)。
- 现在本周进展只有 **3 张卡:验收情况 / 本周新增项目 / 交付中项目**。纯前端改动,无需重启。
### 修正「本周新增项目」口径(关键)
- 用户指出:**「本周新增项目」应按「下单时间」`sign_date` 统计**(本周新下单 / 提前交付的项目),**不能按「更新时间」的本周更新集**。
- 最终实现:`newDeal = allRows.filter(p => inWeek(p.sign_date) && (isPlaced(p) || p.origin === "提前交付"))`。
- 「验收情况」「交付中项目」仍按「更新时间」在本周的项目统计(用户此次未要求改)。
- 数据:2026-09-20 有 1 条 sign_date=2026-09-20(18,000 元)→ 本周新增项目 = 1。
### 「交付中项目」→「交付项目」
- 卡片改名 **「交付项目」**:统计**本周更新的**项目里 项目状态 ∈ {**交付中, 交付完成**} 的。
- 最终本周进展 3 张卡:**验收情况**(本周更新 ∩ 已验收)/ **本周新增项目**(按下单时间 sign_date 在本周 ∩ 已下单或提前交付)/ **交付项目**(本周更新 ∩ 交付中+交付完成)。纯前端改动,无需重启。
## 新增「年度任务」tab(数据源《年度任务.xlsx》)
- 用户提供 `C:/Users/Administrator/Desktop/年度任务.xlsx`,要求定开加一个 tab 展示年度任务,并按「验收/下单时间」回填。
- **Excel 结构**(Sheet1,A1:G6):列 = 季度 / 计收目标(万元)/ 计收项目数量 / 计收项目金额(万元) / 计收完成率 / 新增签单项目数量 / 新增签单项目数量金额(万元);行 = Q1~Q4 + 合计。目标值 **Q1 35 / Q2 225 / Q3 160 / Q4 260(合计 680)万元**。
- **读取方式**:`tencent-docs-routing` → `tencent-docs-sheetagent`(skill 不存在)→ `tencent-local-office-edit`(`edsdk.py` 可用,`open_file` 成功)但 `sheet_*` 一律报 **No workbook open**;按 skill 降级规则改用 **openpyxl** 直接读(已告知用户)。
- **实现**(纯前端 `web/app.js`):
- 新增常量 `CUSTOM_ANNUAL_TARGETS = {1:35,2:225,3:160,4:260}`(万元)。
- 定开第三个 tab **「年度任务」**(`state.customTab === "annual"`);`renderCustomAnnual(allRows)` 输出与原表同列的表格 + 合计行。
- **计收项目** = `accept_date`(验收时间,季度文本)== Qn;**新增签单** = `isPlaced` 且 `sign_date` 落在本年度该季度;金额 元→万元;**计收完成率** = 计收金额 ÷ 目标。
- **回填现值(2026)**:Q1 计收 8个/92.64万(264.7%)、签单 8个/33.06万;Q2 计收 35个/190.09万(84.5%)、签单 12个/79.65万;Q3 计收 21个/88.68万(55.4%)、签单 12个/39.75万;Q4 全 0;合计 计收 64个/371.41万(54.6%)、签单 32个/152.47万。
- 纯前端改动,无需重启;`node --check` 通过。
### tab 改名 + 列序调整
- 定开第一个 tab **「项目明细」→「项目总览」**(chip 与卡片标题「定开项目总览」都改)。
- `customTableHtml` 列序:把**「项目归属」移到「下单时间」之后**(新序:项目名称 / 项目ID / 下单时间 / 项目归属 / 办事处 / …)。项目总览与本周进展两个 tab 共用,故同时生效。
- 后端导出标题仍是「定开项目明细」(未改,用户只说 tab 名)。纯前端改动,无需重启。