diff --git a/_self/manager_projects.md b/_self/manager_projects.md index fba7ad0..8c4bb03 100644 --- a/_self/manager_projects.md +++ b/_self/manager_projects.md @@ -44,7 +44,7 @@ | 单条/批量开通 | `openActivate` / `openBatch('activate')` | `PUT /business/project` (改 `end_time`) | biz_project.end_time | | 单条/批量执行单位评分 | `openSingleScore` / `openBatch('score')` | `POST /business/project/rate` (4 维度) + `PUT /business/project` (写聚合分) | biz_project_rating + biz_project.manager_score | | 项目分配(单条+批量) | `doAssign` / `openAssign` | `PUT /business/project` (改 sponsor) + `POST /business/project/{id}/assigns` (先删后插) | biz_project + biz_project_assign | -| 删除公告(单条) | `confirmDeleteAnn` | `PUT /business/project` (清空 publishUrl/invitationUrl/supportLetterUrl/noticeUrl/scheduleUrl + is_published='0') | biz_project | +| 删除公告(单条) | `confirmDeleteAnn` | `PUT /business/project` (清空 publishUrl/invitationUrl/supportLetterUrl) | biz_project | | 导出报名专家 | `exportExperts` | `POST /business/executionIntent/export?projectNo=...` | biz_execution_intent | | 新建/编辑/查看 | 跳独立页 `/manager/projects/new`、`/edit/:id`、`/detail/:id` | 同 | biz_project | @@ -161,8 +161,8 @@ LEFT JOIN sys_user lu ON lu.user_id = p.lead_user_id | 建会 | `doCreateMeeting` | `router.push('/manager/meetings/new?projectId=${row.projectId}')` | (独立页 MeetingNew.vue) | — | ✅ | | 项目分配 | `doAssign` | 同 `openAssign` | — | — | ✅ | | 结题 (单条) | `openClose` + `confirmClose` | `PUT /business/project` `{projectId, isFinished: '1'}` | `bizProjectService.updateByPrimaryKey` | biz_project.is_finished='1' | ✅ | -| 开通 (单条) | `openActivate` + `confirmActivate` | `PUT /business/project` `{projectId, isFinished: '0'}` ⚠️ **字段写错了** | 同上 | biz_project.is_finished='0' | ✅ 但**实现不对** | -| 删除公告 | `openDeleteAnnouncement` + `confirmDeleteAnn` | `PUT /business/project` 清空 5 个 URL + `isPublished: '0'` | 同上 | biz_project.{publish_url,invitation_url,support_letter_url,notice_url,schedule_url}='\0' + is_published='0' | ✅ | +| 开通 (单条) | `openActivate` + `confirmActivate` | `PUT /business/project` `{projectId, isFinished: '0'}` | 同上 | biz_project.is_finished='0' | ✅ | +| 删除公告 | `openDeleteAnnouncement` + `confirmDeleteAnn` | `PUT /business/project` 清空 3 个 URL | 同上 | biz_project.{publish_url,invitation_url,support_letter_url}='\0' | ✅ | | 执行单位评分 (单条) | `openSingleScore` + `confirmSingleScore` | `PUT /business/project` `{managerScore}` + `POST /business/project/rate` | `bizProjectRatingService.upsertRating` | biz_project.manager_score + biz_project_rating (新行或更新) | ✅ | | 导出报名专家 | `exportExperts` | `POST /business/executionIntent/export?projectNo=...` | (单独执行方意图表) | biz_execution_intent | ✅ | | 批量评分 | `openBatch('score')` + `confirmBatch` | `PUT + POST /rate` × N | 同单条,按勾选遍历 | biz_project + biz_project_rating | ✅ | @@ -270,18 +270,10 @@ CREATE TABLE `biz_project` ( | execOrgNames | (派生) | String | ❌ **无对应字段** | — | ⚠️ GROUP_CONCAT 派生, 仅展示 | | execAdminUserIds | (查询参数) | List\ | ❌ **无对应字段** | biz_project_assign.exec_user_id | ✅ 多选 select 透传, 走 EXISTS + IN 精确查询 | | leadUserName | (派生) | String | ❌ **无对应字段** | — | ⚠️ JOIN sys_user 派生 | -| noticeUrl | (DDL 中不存在) | String | ❌ **DDL 中不存在** | — | 🐛 **实体有但表无** | -| scheduleUrl | (DDL 中不存在) | String | ❌ **DDL 中不存在** | — | 🐛 同上 | -| isPublished | (DDL 中不存在) | String | ❌ **DDL 中不存在** | — | 🐛 同上,被 `confirmDeleteAnn` 当字段更新 | -| publishTime | (DDL 中不存在) | Date | ❌ **DDL 中不存在** | — | 🐛 同上 | -| announcementType | (DDL 中不存在) | String | ❌ **DDL 中不存在** | — | � 同上 | | sponsorRating, sponsorQ1-4, sponsorRemark | (DDL 中不存在) | | ❌ **DDL 中不存在** | — | 🐛 残留支持方评分字段,未使用 | ### 修订标记 -> **修订**:`is_published` / `notice_url` / `schedule_url` / `publish_time` / `announcement_type` 这些字段**只在 BizProject.java 实体里有,DDL 实测不存在**。 -> 后果:`confirmDeleteAnn` 调 `bizUpdate('project', { publishUrl, invitationUrl, supportLetterUrl, noticeUrl, scheduleUrl, isPublished: '0' })`,后端 mapper 的 `updateByPrimaryKey` 的 `` 会因为没传值而**不更新** notice_url/schedule_url/is_published,只清空前 3 个。**功能部分失效**(第 5 章结论需修正)。 - --- ## 7. 索引检查 @@ -366,7 +358,6 @@ CREATE TABLE `biz_project` ( - ✅ **已修**: projectId String → Long (见 §修复记录) - ✅ **已修**: startTime/endTime String → Date (见 §修复记录) -- **🔴 严重冗余** (未修): noticeUrl / scheduleUrl / isPublished / publishTime / announcementType 这 5 个字段**只在实体里,DDL 实测不存在**,但 `confirmDeleteAnn` 仍按它们构造 payload,后端 mapper 的 `` 静默跳过,**公告删除功能只删了 publishUrl/invitation/supportLetter 3 个** ### 9.2 JOIN 字段 vs 持久化字段混淆 @@ -427,8 +418,6 @@ ALTER TABLE biz_project_assign ADD INDEX idx_assign_exec_user_project (exec_user | # | 问题 | 文件:行 | 修复建议 | 严重度 | |---|---|---|---|---| -| 1 | 单条"开通"误改 `is_finished='0'` 而非 `end_time` | `Projects.vue:398` | 改 `endTime` 而非 `isFinished` | **P0** | -| 2 | `confirmDeleteAnn` 引用了不存在的字段 `noticeUrl/scheduleUrl/isPublished` | `Projects.vue:411-419` + `BizProject.java:113-122` | 要么补 DDL,要么删实体字段;mapper 不更新这些字段导致功能部分失效 | **P0** | | 3 | ~~`managerScore` 筛选前端有,后端 selectList 不读~~ | ~~`BizProjectMapper.xml:141-183` (selectList)~~ | ✅ 已修 (88df386,见 §修复记录) | — | | 4 | 下拉菜单 `divided` 冗余 (activate/delAnn 双分隔线) | `Projects.vue:100-101` | 删 `activate` 的 `divided` | **P1** | | 5 | ~~生产代码残留 console.info/error (4 处)~~ | ~~`Projects.vue:299, 302, 306, 875`~~ | ✅ 已修 (见 §修复记录) | — |