feat: 邀请函邮件发送 + 首次设密/密码为空 + 姓名单一可信源

邀请发送 (菜单暂隐藏, 待确认参数见 发送邀请-待确认参数.md):
- 后端: BizInvite / BizInviteRecipient + Controller/Service/Mapper/XML
- 邮件: InviteMailSender (spring-boot-starter-mail SMTP) + application*.yml 邮件配置
- 上传进度: UploadProgressRegistry + UploadProgressController
- 前端: InviteList / InviteNew / InviteDetail / InviteView + api/business/invite.js
- 原型: proto/html/components/invite-detail / new-invitation / send-invitation

登录/账号:
- 首次设密: /getInfo 返回 isPasswordEmpty, SysProfileController 密码为空时跳过旧密码校验, ForcePasswordDialog 强制弹窗
- 姓名单一可信源 resolveDisplayName: doctor→biz_expert.name, sponsor/executor→biz_person.name, 其余回退 nick_name
- OA compliance 门禁改为按手机号查 ecology 视图 (不再限定 manager/leader)

其它:
- OSS zip 在线查看 (列清单+取单文件, 公开只读) + SecurityConfig permitAll
- doctor 项目详情 ProjectDetail.vue
- 数据库/测试/设计文档 (md) 入库
This commit is contained in:
郭庆泰
2026-09-10 20:40:49 +08:00
parent 56615f9806
commit 5a0a892574
171 changed files with 11032 additions and 876 deletions
+44
View File
@@ -0,0 +1,44 @@
# 待优化遗留项(本次 0/1→Y/N 未改的部分)
> 记录时间:2026-09-06
>
> 背景:已完成 `biz_project.is_finished` / `is_published`、`biz_department.status`、`biz_article.status`、`biz_meeting.labor_signed` 这 5 列 `char(1)` 0/1→Y/N 的迁移(test+prod 两库、后端、前端、文档四层同步)。
>
> 下面是**发现但未修改**的项,留待下次处理。
---
## 1. 其它表 `status` 仍存 0/1(未纳入本次 5 列范围)
这些 `status` 仍是 0/1,与新 Y/N 约定不一致。
| 表.列 | 后端字面量 | 前端文件 | 备注 |
|---|---|---|---|
| `biz_special_plan.status` | `BizSpecialPlanMapper.xml:33` `status='0'` | `admin/BizSpecialPlanAdmin.vue``BizSpecialPlanEdit.vue` | 专项计划 |
| `biz_doctor_title.status` | `BizDoctorTitleMapper.xml:37` `status='0'` | `admin/Title.vue` | 医生职称 |
| `biz_org.status` | `BizOrgMapper.xml:183` `o.status='0'` | 待查(机构管理页) | 机构 |
| `sys_user.status` | `BizSysUserQueryMapper.xml:26` `u.status='0'` | `admin/Users.vue` | 框架标准字段 |
| `sys_role.status` | —(框架自带) | `admin/Roles.vue` | 框架标准字段 |
| `sys_dict.status` | —(框架自带) | `admin/ProjectCategory.vue` | 框架标准字段 |
| `biz_project_assign.status` | `BizProjectAssignMapper.xml:33` `status='0'` | 待查/可能无前端 | 项目分配 |
> ⚠️ 各表的 0/1 语义**并不相同**(有的 0=启用/1=停用,有的 0=正常/1=停用,biz_project_assign.status 含义又不同)。改之前逐个查 `COLUMN_COMMENT` 确认,**不要照搬本批次的映射方向**。
> `sys_user` / `sys_role` / `sys_dict` 是 RuoYi 框架标准字段,改动会影响框架行为,建议单独评估是否值得动。
## 2. `biz_project_plan.is_finished` 是死字段
- 查库确认:`biz_project_plan` 表**没有** `is_finished` 列(全库只有 `biz_meeting.is_finished``biz_project.is_finished` 两列)。
- `BizProjectPlan.java:49-50``isFinished` 字段无对应列、无 resultMap 映射,属残留,可直接删除。
## 3. `biz_meeting.is_finished` 是 tinyint 0/1(与项目级 `is_finished` 同名不同型)
- DB`biz_meeting.is_finished tinyint NOT NULL DEFAULT 0`
- 后端:`BizMeeting.java``isFinished``Integer`(不是 String
- 前端:`utils/meetingStage.js``isTrue()``views/meetings/Meetings.vue``MeetingDetail.vue` 都按 tinyint0/1)判断
- 若也要统一成 `char(1)` Y/N,需改:列类型 → `Integer``String` → 前端这些 `isOne/isTrue/isOneVal` 判断,改动面较大,建议单独评估。
## 4. `biz_meeting.labor_signed` 签署链路未接线
- 已改成 `char(1)` Y/N(默认 `N`),但全库该列从未出现过 Y:test 46 条、prod 3 条全 `N`
- 代码里无 `setLaborSigned(...)` 调用,前端无 `laborSigned` 引用——「签署劳务」动作目前未实现。
- 将来实现签署时,落库值要写 `'Y'`(不是旧 `'1'`)。