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

103 lines
14 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 名)。纯前端改动,无需重启。
## 推送到 develop-chezhiqi
- 仓库此前**未配置 git 身份**(唯一提交 e9854eb 作者是 mula.liu <mula.liu@163.com>)。按用户选择,设**本仓库** `user.name=chezhiqi` / `user.email=chezhiqi@unissense.tech`(邮箱取远端域名 unissense.tech,如不对可 amend)。
- 提交 **a77cd7b**「定开项目:台账化改造 + 统计/导出/搜索调整,新增本周进展与年度任务 tab」,包含 app/**、web/**、scripts/**(新增 `import_custom_ledger.py`)、README.md、run.sh、`data/board.db`、`.workbuddy/memory/**`(含被 git 跟踪的 `__pycache__/*.pyc`)。
- 已 push 到 `origin/develop-chezhiqi`(`e9854eb..a77cd7b`),本地与远端一致(远端还提示可发 PR main...develop-chezhiqi)。
- **有意未提交**:`data/board.db.bak-*` 4 个本地备份(保持 untracked)。
## 「项目归属」新签订单 → 华智下单
- 前端 `web/app.js`:`CUSTOM_ORIGINS` / `CUSTOM_PLACED` 里 `新签订单` → **`华智下单`**(连同新建对话框默认值、统计说明文案,全文替换 6 处,现 app.js 内已无「新签订单」)。
- **数据迁移**:`UPDATE custom_projects SET origin='华智下单' WHERE origin='新签订单'`(83 行);备份 `data/board.db.bak-before-origin-rename-20260920_213304`。现 origin 分布:华智下单 83 / 存量项目 27 / 汇智直签 10 / 提前交付 2。
- `scripts/import_custom_ledger.py`:读入行时把 `新签订单` 归一化为 `华智下单`(防再导入回退),并更新文档注释;`app/models.py` 注释同步。
- 纯前端 + 数据 + 脚本改动,**无需重启**(models.py 仅注释)。**本次未 push**(用户本轮只要求改名)。
## 三项改名/调整(项目状态 / 本周卡片 / 归属选项)
1. **项目状态「交付中」→「进行中」**(全量改名):
- `web/app.js` 全文 `交付中`→`进行中`(共 12 处:状态色映射、STATUS_OPTIONS、进度列判定、本周「交付项目」= 进行中+交付完成、新建/编辑 statusOpts、placeholder、注释)。
- **数据迁移** `UPDATE custom_projects SET project_status='进行中' WHERE project_status='交付中'`(10 行);备份 `data/board.db.bak-before-status-rename-20260920_213707`。现状态:已验收 64 / 待开发 29 / 交付完成 17 / **进行中 10** / 退单 2。
- `import_custom_ledger.py` 读入时 `交付中`→`进行中` 归一化;`models.py` 注释同步。
2. **本周进展卡片「本周新增项目」→「新增项目」**(`web/app.js` 卡片标题 + 说明文案)。
3. **项目归属去掉「其他」选项**:`CUSTOM_ORIGINS = [华智下单, 存量项目, 汇智直签, 提前交付]`(新建/筛选下拉都不再有「其他」);`models.py` / 导入脚本文档注释同步。数据中本来就没有 origin=其他 的行。
- 纯前端 + 数据 + 脚本改动,**无需重启**;`node --check` / `ast.parse` 通过。**本轮未 push**。
## 本周卡片改名 + 清空历史「更新时间」
1. **本周进展卡片「交付项目」→「进行中项目」**(`web/app.js` 卡片标题/说明/标题栏摘要;口径未变,仍是 本周更新 ∩ 进行中+交付完成)。
2. **清空早于 2026-09-18 的「更新时间」**:`UPDATE custom_projects SET update_date=NULL WHERE update_date IS NOT NULL AND update_date!='' AND update_date < '2026-09-18'` → 清空 **111** 行;保留 11 行(均为 2026-09-18 及以后编辑的,含 "YYYY-MM-DD HH:MM" 提交时间)。备份 `data/board.db.bak-before-clearing-updatedate-20260920_214254`。
- 影响:`update_date` 仅剩 11 行有值;「删除本周更新」现在只会命中这 11 行(都在本周)。后续「修改/新建」会按提交时间重新写入。
## 表格排序 + 计划筛选 + 列序/按钮调整
1. **列序**:`customTableHtml` 里把「备注」与「更新时间」**对调**(… 风险值 / **更新时间** / **备注** / 操作)。
2. **去掉「删除本周更新」按钮**:删除 `renderCustomList` 卡片头里的按钮、`bindCustomList` 里的绑定与整个 `purgeWeek()` 函数(后端 `/custom/weekly-preview`、`/custom/purge-week` 接口保留未删)。
3. **表头排序**:`下单时间`(sign_date) / `订单金额`(amount, 数值) / `更新时间`(update_date) 三个表头可点击排序,`state.customSort = {key, dir}`;点不同列默认「降序」,再点同列切换升/降;表头显示 ▲/▼,卡片副标题显示当前排序。
4. **新增「推动验收计划」筛选**:工具栏加 `#cAcceptPlan`(`state.customAcceptPlan`),选项取数据中实际出现过的值(Q3/Q4/27年/-- 等);导出也带 `accept_plan` 参数(后端 `export_custom` 新增 `accept_plan`)。
- `state` 新增 `customAcceptPlan` / `customSort`,均加入 `UI_FIELDS` 持久化。
- 后端 `export.py` 改动 → 重启 uvicorn(PID 23436);`node --check` / `ast.parse` 通过。实测导出 `accept_plan=Q3` 生效。
## 第二次推送 develop-chezhiqi
- 提交 **07e1b0a**「定开项目:改名(华智下单/进行中)+ 表格排序与筛选 + 列序/按钮调整」(6 files changed, 106 insertions, 78 deletions):`web/app.js`、`app/models.py`、`app/routers/export.py`、`scripts/import_custom_ledger.py`、`data/board.db`、`.workbuddy/memory/2026-09-20.md`。
- 已 push 到 `origin/develop-chezhiqi`(`a77cd7b..07e1b0a`),本地与远端一致。
- **注意**:首次 `git push` 那次返回空输出、实际未推成功(`status -sb` 显示 ahead 1),重试后成功;以后 push 后要用 `git status -sb` / `git log origin/<branch>` 复核。
- 仍未提交:`data/board.db.bak-*` 本地备份(7 个,保持 untracked)。