Files
guoju0808/发送邀请-待确认参数.md
T
郭庆泰 5a0a892574 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) 入库
2026-09-10 20:40:49 +08:00

101 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 发送邀请 — 待确认参数清单
> 开发已按「默认口径」推进,下面这些值未最终确认,代码里全部做成配置项/占位符,等确认后回填即可,**不需要改代码结构**。
## 一、短信(新增独立模板,不复用 SMS_512040098
| 项 | 当前值/占位 | 状态 |
|---|---|---|
| 短信模板 code | **待确认**(阿里云控制台新建「邀请」模板后填入) | 未确认 |
| 模板占位符 | 建议 1 个:`${link}`(邀请链接) | 未确认 |
| 短信正文参考 | `北京整合医学学会诚挚邀请您参加,请点击链接确认:${link}` | 待定稿 |
| 签名 | 北京整合医学学会(复用 `ruoyi.sms.signName` | 已确认 |
| accessKeyId/Secret | 复用 `ruoyi.sms.accessKeyId` / `accessKeySecret` | 已确认 |
> 落地:`application.yml` 新增 `ruoyi.sms.inviteTemplate: 待填`。
## 二、邮件(参考 xxl-job EmailJobAlarm,走 spring-boot-starter-mail
| 项 | 当前值/占位 | 状态 |
|---|---|---|
| 发件账号 (from) | `contactus@bahim.org.cn`(原型稿) | 待确认 SMTP 账号 |
| SMTP host | **待确认** | 未确认 |
| SMTP port | **待确认**465 SSL / 587 STARTTLS | 未确认 |
| SMTP 用户名/密码 | **待确认** | 未确认 |
| 邮件主题 | `诚邀您参加"{会议名称}"项目` | 待定稿 |
| 邮件正文 | 富文本邀请内容 + 邀请链接(点开即邀请函页) | 待定稿 |
> 落地:`application.yml` 新增 `spring.mail.*``pom.xml` 新增 `spring-boot-starter-mail`**需重新 mvn install**)。
## 三、邀请链接 baseUrl
| 项 | 生产 | 测试 |
|---|---|---|
| 域名 | 待确认(参考 esignBaseUrl prod=`https://hegui.bahim.org.cn` | `https://risingdoctor.com/hg` |
> 落地:`application.yml` 新增 `ruoyi.invite.baseUrl`,公开链接 = `{baseUrl}/#/invite/{token}`。
## 四、数据库(2 张新表 + biz_expert 补列)
> 库结构手工维护,未生成 .sql。**建表前需按下方清单核对,确认字段名/类型后执行**。
### biz_invite(批次/邀请函主表)
`id, project_no, meeting_name, period_no, meeting_time(datetime), send_time(datetime), content(longtext), redhead_file_url(varchar), send_channel(varchar), create_by, create_time`
### biz_invite_recipient(收件人明细)
`id, invite_id, name, phone, email, source(char1), remark(char1), send_status(char1), fail_reason, confirm_status(char1), confirmed_at(datetime), token(varchar36), create_time`
### biz_expert 补列
`email varchar` — **待确认**是否新增(邮件渠道前置依赖)。
## 五、业务口径(已按默认实现,可回改)
| 决策 | 默认口径 |
|---|---|
| 确认是否可逆 | 不可逆(已确认→不可取消) |
| 备注语义 | `1`=发 / 空=不发(原型「备注空默认已确认」判为 demo 示意) |
| 未发专家 | 详情仍列出,发送状态标「未发送」 |
| 确认与参会人表 | v1 不联动 biz_meeting_attendee |
## 六、代码落地对照(已开发,待你确认参数后回填)
### 后端(新增/改动文件)
| 文件 | 说明 |
|---|---|
| `domain/BizInvite.java` | 主表对象(含聚合列 recipientCount/confirmedCount、暂存 recipients |
| `domain/BizInviteRecipient.java` | 收件人明细对象 |
| `mapper/BizInviteMapper.java` + `.xml` | 主表 CRUD + 列表聚合 + 回填 send_time |
| `mapper/BizInviteRecipientMapper.java` + `.xml` | 明细 CRUD + insertBatch + updateConfirmByToken + updateSendStatus |
| `service/IBizInviteService.java` + `impl/BizInviteServiceImpl.java` | create(含 token 生成)/send/confirm/delete |
| `controller/BizInviteController.java` | manager 端点 `/business/invite/*` |
| `controller/BizPublicController.java` | 公开端点 `/business/public/invite/{token}` + `/{token}/confirm`(已加 inviteService |
| `mail/InviteMailSender.java` | 邮件发送(spring-boot-starter-mailJavaMailSender 未配置时降级返回 false |
| `sms/AliyunSmsSender.java` | 已加 `sendInvite(phone, link)` + `inviteLink(token)` + `inviteTemplate` 字段 |
| `ruoyi-business/pom.xml` | 已加 `spring-boot-starter-mail`**需重新 mvn install** |
### 配置落点
| 配置项 | 文件 | 当前值 |
|---|---|---|
| `ruoyi.sms.inviteTemplate` | application.yml | `待填`(阿里云新建模板后回填) |
| `ruoyi.invite.baseUrl` | application.yml / -prod / -test | prod=`https://hegui.bahim.org.cn`test=`https://risingdoctor.com/hg` |
| `spring.mail.*` | application.yml | host=`待确认`、port=`465`、username=`contactus@bahim.org.cn`、password=`待确认` |
### 前端(新增/改动文件)
| 文件 | 说明 |
|---|---|
| `api/business/invite.js` | manager + 公开 API |
| `views/manager/InviteList.vue` | 列表页(新建/详情/发送/删除) |
| `views/manager/InviteNew.vue` | 新建页(手输字段 + RichEditor + 专家库选择 + 批量导入) |
| `views/manager/InviteDetail.vue` | 详情页(含收件人发送/确认状态) |
| `views/portal/InviteView.vue` | 公开邀请页(富文本 + 底部确认按钮) |
| `router/index.js` | 加 `invite/:token`(公开)+ `invites*`manager |
| `layout/AdminLayout.vue` | manager 菜单加「发送邀请」(icon Promotion |
### 上线前待办(对应上面的待确认项)
1. 阿里云新建「邀请」短信模板 → 回填 `ruoyi.sms.inviteTemplate`
2. 确认 SMTP host/port/账号密码 → 回填 `spring.mail.*`
3. 确认生产邀请链接域名 `ruoyi.invite.baseUrl`
4. 建 2 张表 `biz_invite` / `biz_invite_recipient`(手工库,无 .sql,字段见第四节)。
5. `biz_expert.email` 是否补列(邮件渠道前置依赖,否则邮件渠道需手工填邮箱)。
6. `mvn install`(新增 spring-boot-starter-mail 依赖后)。